2011-06-14 3 views
0

:목표 - C 객체 생성 방법의 차이

+ (id)videoGameWithTitle:(NSString *)newTitle publisher:(NSString *)newPublisher year:(int)newYear { 
    VideoGame *game = [[[VideoGame alloc] init] autorelease]; 
    game.title = newTitle; 
    game.publisher = newPublisher; 
    game.year = newYear; 

    return game; 
} 

- (id)initVideoGameWithTitle:(NSString *)newTitle publisher:(NSString *)newPublisher year:(int)newYear { 

    self = [super init]; 

    if(self) { 
     self.title = newTitle; 
     self.publisher = newPublisher; 
     self.year = newYear; 
    } 
    return self; 
} 
+3

첫 번째 방법은 초기화 프로그램이 아닙니다. [편의 생성자] (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html)입니다. 두 번째 메소드는 초기화 메소드가되는 시도이지만 인스턴스 메소드로 작동하려고하는 클래스 메소드이기 때문에 실패합니다. 보조 노트로, 두 번째 방법은 초기화 프로그램을 '초기화 ...'라고 명명하는 코코아의 규칙을 따르지 않습니다. –

+0

@Bavarious - +1에 대한 귀하의 의견입니다. @Peter가 실제로 올바르게 이름이 지정된 초기화 프로그램이 될 두 번째 방법을 의도 했으므로이 질문에서 오타가 수정되었습니다. (메서드 본문이 확실히 그가 마음에있는 것 같습니다.) –

+0

@sherm Pendley - 편집 내용 롤백. 질문을 완전히 변경했습니다. OP가 실제로 많은 오타를 만들었다 고 가정하고 있습니다. 다른 질문입니다. – Abizern

답변

1

첫 번째 방법은 호출자가 소유하지 않고 공개하지해야 객체를 생성하는 클래스 방법이다. 두 번째 (원래 질문의 오타를 제외하고)는 이니셜 라이저이며 호출자가 +alloc과 함께 호출해야하므로 호출자가 소유하고 릴리스해야하는 객체를 반환합니다.

어떤 방법 이름이 소유권을 의미하고 어떤 것이 소유권을 의미하는지에 대한 설명을 포함하여 전체 설명을 보려면 Apple의 Memory Management Programming Guide을 살펴보십시오.