2010년 12월 22일 수요일

Objective-C multiple argument to methods

-(int) set: (int) n: (int) d;

이렇게 선언 하고

[object set: 1 : 3];

이렇게 호출 할수도 있다.
(methods without argument names)

C/C++ 에서 여러 파라메터를 하나의 함수에 전달 하여 호출 할 때 이렇게 해야 할거 같은데...
1 : 3 ~~ 음 이게 좀 어색 하게 다가 온다.


오브젝티브C 에서는
일반적으로는 다음과 같이 선언 한다.

@interface Rectangle: NSObject
{
int width;
int height;
}

@property int width, height;
-(void) setWidth: (int) w andHeight: (int) h;

@implementation Rectangle;
-(void) setWidth: (int) w andHeight: (int) h
{
width = w;
height = h;
}

사용 할때
[myRect setWidth: 5 andHeight: 8];


2010년 12월 21일 화요일

Objective-C @property , @synthesize

@property , @synthesize 를 간단하게 요약해 봅시다.

@interface Fraction : NSObject
{
int numerator;
int denominator;
}

@property int numerator, denominator;

~~~
@end

-------------------------------------------------

@implementation Fraction

@synthesize numerator, denominator;

-------------------------------------------------

myFraction.numerator = 1;
myFraction.denomiator = 3;


요정도 까지..



2010년 12월 17일 금요일

Objective-C / C++keyword 비교

http://en.wikipedia.org/wiki/Objective-C
여기를 기준으로 간단하게 c++과 비교해보자
이걸 토대로 코드 컨버팅도 가능할듯 하다.

오브젝트의 메서드를 호출 하는 방법
obj->method(argument);

[obj method: argument];

class 선언

@interface classname : superclassname {     
// instance variables 
} 
+classMethod1; 
+(return_type)classMethod2;
+(return_type)classMethod3:(param1_type)param1_varName;   


-(return_type)instanceMethod1:(param1_type)param1_varName :(param2_type)param2_varName; 
-(return_type)instanceMethod2WithParameter:(param1_type)param1_varName andOtherParameter:(param2_type)param2_varName; 
@end


class classname : public superclassname {  
    public:   // instance variables     
    // Class (static) functions   
    static void* classMethod1();   
    static return_type classMethod2();   
    static return_type classMethod3(param1_type param1_varName);     
    // Instance (member) functions   
    return_type instanceMethod1(param1_type param1_varName, param2_type param2_varName);   
    return_type instanceMethod2WithParameter(param1_type param1_varName, param2_type param2_varName=default); 
};


-(void) setRangeStart:(int)start :(int)end; 
-(void) importDocumentWithName:(NSString *)name withSpecifiedPreferences:(Preferences *)prefs beforePage:(int)insertPage;


class 구현
@implementation classname 
+classMethod {     
    // implementation 
} -instanceMethod {     
    // implementation 
} 
@end




이거 말고 나머지
datatype 
걍 C/C++ 과 유사 하다고 할수 있음
 id 타입이란게 하나 있긴 한대 아직 모르겟음

operator 완전 같은거 같음

loop statement 완전 같다고 봄

making decisions (if / else / switch) 완전 같다고 봄

아직 나머지는 보지 못했음 


2010년 12월 16일 목요일

Objective-C class

내가 아는 컴퓨터 랭귀지는 Basic, fortran, cobol , C, C++, java, pascal,
여기서 Basic 아직도 기억이 나긴 하는 언어 이지만 이제 쓸일이 없다.
fortran cobol 언급할 필요도 없는 구시대에 언어 80년대 말 학원가에서 초딩들을 오래 붙잡으려고 가르칠때 나또한 어설프게 배웠다.
하여 지금은 전혀 구사 하지도 못할듯,
C, C++ 밥벌이 언어이므로 언제나 보고 잇다.
Java처음 등장 부터 맘에 안들어서 걍 멀리 했다. C++가 유사한 구문이 많다 정도만 알지 깊게 모른다.
pascal 볼랜드 C++빌더에서 VCL 컴퍼넌트를 이해하기 위해 읽기 정도만 가능한 언어
델파이 보다 C++빌더에 더 친했기 때문에 실제로 작성해본 코드는 거의 없다.
오히려 파스칼로 구현된 코드를 C++로 변경하는 작업을 해본듯.

이제 오브젝티브-C 도대체 머하는 놈인지 한번 끝까지 봐보고 판단해 보자
왜 이따이 언어를 도입해서 진입 장벽을 만드는지.

Addison wesley - Programming in Objective C 2.0을 보면서 나름대로 토를 달아보자..

#import

@interface Fraction: NSObject
{
int numerator;
int denominator;
}

-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

@end

@implementation Fraction
-(void) print
{
NSLog(@"%i/%i", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;

myFraction = [Fraction alloc];
myFraction = [myFraction init];

[myFraction setNumerator: 1];
[myFraction setDenominator: 3];

NSLog (@"The value of myFraction is:");
[myFraction print];
[myFraction release];

[pool drain];
return 0;
}


위 코드를 하나 하나 분석해 봅시다.

@interface section
@implementation section
program section

3개의 section으로 구분 지어 진다.

@interface section

@interface NewClassName: ParentClassName
{
memberDeclarations;
}

methodDeclarations;
@end;

위 예제에서는 NSObject가 부모 클래스이고 Fraction이라는 클래스를 선언 하고
멤버 변수 numerator, denominator; 를 각각 int형으로 선언
메서드를 print , setNumerator, setDenominator 를 선언 한것이다.

-(void) print;

-가 의미 하는 것은 instance method이고
+는 class method를 의미 한다. class 메서드는 나중에 설명이 될듯 여기선 스킵
리턴형이 void 이다.

-(void) setNumerator: (int) n;
리턴형은 void이고 아규먼트 int형 n으로 선언 된것이다.
아규먼트가 있을 경우 : 를 붙여 준다.

- (void) setNumerator : (int) n;

method type, return type, method name, method take arguments, arguments type, argument name

@implementation section

@implementation NewClassName
methodDefinitions;
@end


머 대충 보면 함수 구현 부 보면 알수 있을듯 하여 스킵한다.

Program section

NSObject를 상속 받아서 alloc, init , release 등의 메서드를 호출 할수 있다.

Fraction *myFraction = [[Fraction alloc] init];
이렇게 사용할수 있다.

이는 지금 까지 많이 봣던
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
과 같은 스타일로 자주 나온다.

메서드 호출
[myFraction setNumerator: 1];
[myFraction print];

메모리 해제 등
[myFraction release];

간단하게 클래스 선언 메서드 구현 메서드 호출 등을 알아 봣다.
아직 생소 하지만 이제 슬슬 눈에 들어오는듯 하다.




2010년 12월 10일 금요일

Objective-C hello world, cmd line compile

$ vi hello.m
$ cat hello.m
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hello world!!");

[pool drain];
return 0;
}
$ gcc -framework Foundation hello.m -o hello
$ ./hello
2010-12-10 15:27:00.815 hello[20293:903] Hello world!!

macport

http://www.macports.org/

osx 에서 유닉스 명령들을 수행하고 싶거나 패키지를 설치하고 싶을때가 잇을 것이다.

위 사이트에서 macport를 찾아서 설치를 하고

커맨드라인에서 sudo port install 패키지

하면 설치가 된다.

unrar이 필요해서 했는데.

커맨드라인에서 unrar이 아주 잘동작 한다.


osx ntfs read/write driver

http://www.apple.com/downloads/macosx/system_disk_utilities/ntfs3g.html

NTFS 포멧에 디스크를 읽고 쓰려면 반드시 설치 해야 하나보다.

잘못 찾으면 15일 트라이얼 버젼도 잇는데

apple 사이트에서 제공 하는 것은 freeware인듯

bootcamp설치 해서 NTFS디스크를 액세스 할수 잇는듯 해도

막상 이동식 디스크를 붙여 보니 쓰기가 안되서 설치 했다.