- new
- alloc init의 단축 명령으로 객체를 메모리에 할당하고 초기화 하는 메소드까지 한번에 호출
- 인자를 사용하는 초기화 메소드(initWith-)의 사용이 필요한 경우에는 대체 불가
// 같은 역할을 함.
NSObject *object = [NSObject new];
NSObject *object = [[NSObject alloc] init];
// initWithFrame은 new가 대체할 수 없음.
UIView *myView = [UIView alloc] initWithFrame:CGRectZero];
- alloc init
- alloc은 객체를 메모리에 할당하는 역할
- init은 메모리에 할당한 객체를 초기화 하는 역할
- (init-) 메소드는 메모리가 할당된 자기 자신을 없애고 새로운 객체를 만들 수 있으므로 alloc 뒤에 바로 사용.
// 좋은 사용법
NSObject *goodObject = [[NSObject alloc] init];
// 나쁜 사용법
NSObject *badObject = [NSObject alloc];
[badObject init]; // init을 따로 사용할 경우 badObject가 가르키는 객체를 없애고 새로운 객체를 만들 수 있음.
[badObject sendMessage]; // 그에 따라 badObject가 가르키는 객체가 유효하지 않을 수 있음.
- [NSArray array-] VS [[NSArray alloc] init]
- [NSArray array-]: 초기화 시 autorelease된 객체로 초기화(NSString, NSDictionary 등도 마찬가지)
- [[NSArray alloc] init] : 그냥 메모리 할당 및 초기화
// autorelease 된 객체로 초기화.
NSArray *myArr = [NSArray array];
NSString *myStr = [NSString string];
NSDictionary *myDic = [NSDictionary dictionary];
// 메소드는 이런식으로 만들어져 있을 것 같음.
- (NSArray *)array {
return [[[NSArray alloc] init] autorelease];
}