A colossal Dreamer: GR鐵塔-天生我材

[Objective-C] 철탑만 몰랐던 iOS #4 - (Objective-C Category 에서 자기자신 초기화하기) 본문

Development/아이폰

[Objective-C] 철탑만 몰랐던 iOS #4 - (Objective-C Category 에서 자기자신 초기화하기)

江多林 2014. 6. 3. 14:23

"Objective-C Category 에서 자기자신 초기화하기" 이게 가능.? 

개요 
+[NSObject initialize] 와 +[NSObject load] 의 차이 알기. 

 +[NSObject initialize] : 각각의 Class 별로 한 번의 호출이 보장되는 초기화 메소드
 +[NSObject load]  : 구현체(Class/ Category) 별로 한 번의 호출이 보장되는 초기화 메소드


따라서, 

@interface KCCObject : NSObject
@end
@interface KCCObject (Cate)
@end
 
@implementation KCCObject
+ (void)load {
    NSLog(@"hello class");
}
@end
@implementation KCCObject (Cate)
+ (void)load {
    NSLog(@"hello cate");
}
 
// ...
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
    KCCObject *objc = [KCCObject new];
// ...
}
@end
/* ****************************************
2014-06-02 11:26:45.648 Story Board[39148:60b] hello class
2014-06-02 11:26:45.651 Story Board[39148:60b] hello cate
   ****************************************/


참조:    https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/load 

주의: 
 복잡한 클래스 계층구조에서 동시에 연관 클래스가 초기화 되는 경우 2번 이상 호출 될 수도 있다. 
 꼭 한 번만 해야하는 경우에는 dispatch_once 등의 방법으로 코딩해야해요.