Computer195 Objective-C : Formal Protocol "Formal Protocol" - Formal Protocol은 "a named list of methods" 이다 - @protocol 키워드를 이용하여 선언한다 @protocol - ( ) methods @end - 클래스 선언에서 adopting 한다 @interface ClassName @end - Java의 인터페이스와 동일하며 모든 정의된 함수들을 구현해야 한다. - Objective 2.0에서는 필수적으로 구현해야 되는 것과 그렇지 않은 것을 다음의 키워드로 분리 가능하다 @protocla SomeProtocol -(void) Some Function @optional -(void) Some Function2 -(void) Some Function3 @required -(void) Some.. 2009. 6. 19. Objective-C : Categories 2/2 Category의 활용에 대해서 좀더 자세히 알아보자 1) Category를 이용하여 Implementation을 분리하는 경우 일반적으로 interface 선언은 header 파일에, 구현은 .m 파일에 담는게 되며 @implementation 코드를 여러 .m 파일이 존재하게 할수는 없다. 예를 들어 AppKit 의 NSWindow의 경우에 수백가지의 메소드를 가지고 있다. 이이 대한 구현을 하나의 파일에 놓는 다는 것은 유지 보수 측면 및 관리 측면에서 좋은 방법은 아니다. 따라서 NSWindow는 여러 category로 분류되어 있으며 구현 파일 역시 분리 되어 있다. category를 이용한 구현 파일 분리는 다음의 예로 설명한다. 왼쪽은 본 예의 파일 구성이다. CategoryUse1.m에는 .. 2009. 6. 15. Objective-C : Categories 1/2 "Category"는 현존하는 클래스에 새로운 메소드를 추가하는 방법이다. Category는 다음과 같이 선언한다. @interface SomeObject (CategoryName) - Some method to add @end 이에 대한 구현은 @implementation SomeObject (CategoryName) - Method Implementation @end 가 된다. 예를 들어 NSString의 문자열 길이를 NSNumber 형식으로 리턴하는 코드를 생각해 보자. 다음의 코드로 처리가 가능하다. NSNumber *number; number = [NSNumber numberWithUnsignedInt: [string length]]; 이렇게 하지 말고 NSString에 lengthAsNSNu.. 2009. 6. 15. Objective-C : Property 1. Value-Property Objective-C에서는 instant variable에 대한 accessor를 자동으로 설정해주는 property 가 존재한다. 예를 들어 다음 코드를 보자 testObject는 in_variable1,2에 대한 accessor들이 정의되어있고 구현 되어 있다. accessor 정의를 다음과 같이 @property 키워드를 이용하여 간략화 할수 있다. 뿐만 아니라 구현에서도 @synthesize 키워드를 이용하여 @property 로 정의된 attribute에 대하여 accessor를 자동적으로 생성 가능하다. 다음은 이를 이용한 코드 이다. accessor는 dot notation으로 사용이 가능하다. 즉 main은 다음과 같이 변경 가능하다. %% 이는 Object.. 2009. 6. 6. Objective-C : Object Initialization 1. Object Initialization Object 생성을 위해서는 [SomeClass new] 를 이용하거나 [[SomeClass alloc] init] 을 사용한다. Cocoa에서는 new보다는 alloc -> init을 사용하기를 권장한다. [SomeClass alloc] 을 하게 되면 운영체제로 부터 그 object의 instance 변수들을 유지하기에 충분한 메모리를 할당 받는다. 메모리를 할당 받으며 0 으로 초기화 된다. (BOOL은 NO로, float, int는 0으로, pointer는 nil로) SomeClass *classPtr = [[SomeClass alloc] init]; 형태로 사용되며 다음과 같이 사용 되지 않는다 SomeClass *classPtr=[SomeClass a.. 2009. 6. 6. Objective-C : Memory Management - The Rules of Cocoa MM * new, alloc, copy 등을 이용하여 오브젝트를 생성할때 생성된 오브젝트의 retain count는 1이며, 오브젝트가 다 사용되었으면 release 나 autorelease를 보내어 clean up 을 해야 한다. * 다른 메카니즘을 통해서 객체를 소유하고 있는 경우 (retain이 1 이고 autorelease 된 경우) clean up에 대해서 신경쓸 필요는 없다. 만약 특정 기간동안에 해당 객체를 사용하고 싶으면 retain 하고 사용후 release 하면 된다. * 객체를 retain을 했으면 release 하거나 autorelease 해야 한다. 다음의 두 코드를 비교해 보자 1. 명시적 release가 필요한 경우 NSMutableArray *array; array=[[NSMuta.. 2009. 6. 2. 이전 1 ··· 19 20 21 22 23 24 25 ··· 33 다음