- new
- alloc init의 단축 명령으로 객체를 메모리에 할당하고 초기화 하는 메소드까지 한번에 호출
- 인자를 사용하는 초기화 메소드(initWith-)의 사용이 필요한 경우에는 대체 불가 - alloc init
- alloc은 객체를 메모리에 할당하는 역할
- init은 메모리에 할당한 객체를 초기화 하는 역할
- (init-) 메소드는 메모리가 할당된 자기 자신을 없애고 새로운 객체를 만들 수 있으므로 alloc 뒤에 바로 사용. - [NSArray array-] VS [[NSArray alloc] init]
- [NSArray array-]: 초기화 시 autorelease된 객체로 초기화(NSString, NSDictionary 등도 마찬가지)
- [[NSArray alloc] init] : 그냥 메모리 할당 및 초기화
// 같은 역할을 함. NSObject *object = [NSObject new]; NSObject *object = [[NSObject alloc] init]; // initWithFrame은 new가 대체할 수 없음. UIView *myView = [UIView alloc] initWithFrame:CGRectZero];
// 좋은 사용법 NSObject *goodObject = [[NSObject alloc] init]; // 나쁜 사용법 NSObject *badObject = [NSObject alloc]; [badObject init]; // init을 따로 사용할 경우 badObject가 가르키는 객체를 없애고 새로운 객체를 만들 수 있음. [badObject sendMessage]; // 그에 따라 badObject가 가르키는 객체가 유효하지 않을 수 있음.
// autorelease 된 객체로 초기화. NSArray *myArr = [NSArray array]; NSString *myStr = [NSString string]; NSDictionary *myDic = [NSDictionary dictionary]; // 메소드는 이런식으로 만들어져 있을 것 같음. - (NSArray *)array { return [[[NSArray alloc] init] autorelease]; }
'프로그래밍 > iOS' 카테고리의 다른 글
NSAutoreleasePool VS @autorelease block (0) | 2017.04.10 |
---|---|
iOS 식별자(identifier) (2) | 2017.04.07 |
NSURL의 속성 (0) | 2017.04.07 |
nil, Nil, null, NSNull의 차이 (0) | 2017.04.06 |
frame VS bounds (5) | 2017.04.04 |