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 |