본문 바로가기

교육/Objective-C

[Objective-C] 지연된 초기화

1. 지연된 초기화

property는 실제 객체를 사용할 때 초기화 된다.

그래서 객체의 init시점에서 찍어보면 nil값이 나오고

self.객체 등으로 getter를 호출하면 그 때 메모리 주소 값이 찍힌다.

대표적인 예가  self.view

아이폰 라이브러리 대부분이 지연된 초기화 기법을 사용한다.


2. 샘플 코드 

@interface Car : NSObject

@property (strong, nonatomic) NSArray* arr;


@end


@implementation Car

-(NSArray*) arr // getter

{

    NSLog(@"getter");

    if(_arr == nil)

    {

        _arr = [NSArray arrayWithObjects:@"사과", nil];

        NSLog(@"arr 자원 주소 : %p",_arr); // nil

    }

    return _arr;

}

-(id)init

{

    self =[super init];

    if(self)

    {

        NSLog(@"init 자원 주소 : %p",_arr); // nil

        NSLog(@"init 자원 주소 : %p",self.arr); // getter 호출하기 때문에

//        _arr = [NSArray arrayWithObjects:@"사과", nil];

    }

    return self;

}

@end


int main()

{

    Car* c =  [[Car alloc] init];

    

    NSString* s = [c.arr objectAtIndex:0]; // getter 만들었으니 쓰는 시점에 초기화가 된다. 따라서 안쓰면 메모리 할당을 안한다는거

    NSLog(@"%@",s);

    return  0;

}

'교육 > Objective-C' 카테고리의 다른 글

[Objective-C] NSString parsing  (0) 2018.06.26
[Objective-C] c function pointer  (0) 2016.08.01
[Objective-C] category  (0) 2016.08.01
[Objective-C] protocol  (0) 2016.08.01
[Objective-C] kvo(key value observing)  (0) 2016.08.01