두 가지 방법, 즉 호출자가 소유 한 객체를 반환하거나 호출자가 소유하지 않은 객체 (예 : 자동 다시 불러 오기 객체)를 반환 할 수 있습니다. 어떤 전략을 선택하든 관계없이 이름 지정 규칙을 따르십시오. 예를 들어,
- (NSString *)fullNameCopy {
return [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
}
은 발신자가 소유 한 NSString
개체를 반환합니다. 메서드 이름은 fullNameCopy
이며 이름 지정 규칙을 따릅니다. 이름에 'copy'가 포함 된 메서드는 호출자가 소유 한 개체를 반환합니다. 반환 값은 자동 회수 풀에 저장되지 않습니다.
또는
,
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.LastName];
}
또는
- (NSString *)fullName {
NSString *s = [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
return [s autorelease];
}
반환 호출자가 소유하지 않은 문자열을
및 메소드 이름이 ALLOC, 새, 또는 사본이 포함되어 있지 않습니다. 반환 값은 autoreleased이며, 따라서 호출자가 명시 적으로 유지하지 않으면 해당 autorelease 풀이 비울 때 할당 해제됩니다.
즉, 특정 시나리오에서 호출자가 소유하지 않은 개체를 반환하는 두 번째 전략은 더 나은 솔루션처럼 보입니다.호출자는 객체를 즉시 처리 (객체 소유에 관심이 없도록)하거나 속성 (일반적으로 복사 또는 보유 속성)에 보관합니다.
@ Pete의 질문의 첫 번째 부분은 정확하게 잘못되었습니다. – kubi
autorelease에 넣을 경우 어떤 문제가 생길지 설명해 주시겠습니까? 정말 문제가 보이지 않습니까? –
사실 내 생각에, 피트는 그걸 올바르게 받아 들였습니다. 관례는 new, alloc 또는 copy로 시작하지 않는 모든 메소드는 자동으로 릴리즈 된 객체를 반환해야한다는 것입니다. 이 메서드를 호출 한 사람은이 메서드를 유지하려는 경우 해당 메서드를 유지해야합니다. –