2009-05-01 8 views
0

실제로 "new", "create", "alloc"또는 "copy"라는 이름의 메소드를 사용하면 반환 된 객체를 릴리스해야합니다. 하지만 왜이 방법들이 -autorelease를 호출합니까? 이것은 객체를 "과도하게 릴리스"하지 않을까요?편의 생성자 또는 개체 팩토리가 개체를 해제하는 데 신경을 써야하는 이유는 무엇입니까?

그런 방법으로 해당 객체를 가져온 다음 해당 객체를 호출한다고 가정 해 보겠습니다. 객체는 자동 복구 풀에 있으며 참조 카운트는 0입니다. 자동 복구 풀이 해제되면 다음에 어떤 일이 발생합니까?

+0

iPhone 관련 태그는 실제로 관련이 없으므로 제거하십시오. 왜 사람들이 왜 이런 투표를하지 않겠습니까? 좋은 질문입니다. 객관적 - C 초보자들에게 까다로운 점이기 때문에 자주 묻습니다. –

답변

5

편의 생성자는 이름에 해당 단어를 포함하지 않으므로 (예 : [NSMutableArray array]) 규칙에 따라 자동 반복 된 객체를 반환합니다. 유지 된 객체를 반환한다는 단어 중 하나를 가지고있는 메소드는 autorelease를 호출하지 않으므로 질문의 전제 부분이 올바르지 않습니다.

편의 생성자에서 반환 된 객체를 사용자가 명시 적으로 보유하지 않고 릴리스하면 해당 객체가 과도하게 릴리스되어 응용 프로그램이 중단됩니다.

+0

감사! 차가운 샤워가 필요해.) – Thanks

0

죄송합니다. @all! 나는 밝은 햇빛 속에 너무 오랫동안 앉아 있었다고 생각한다. 물론 이러한 편리한 메소드는 처음에 어느 시점에서 -alloc을 호출하기 때문에 작성하는 객체의 소유권을 갖습니다. 그리고 -alloc 메서드는 이미 -alloc이므로 -alloc을 호출하지 않습니다. 그게 전부 야.

질문을 삭제하는 것에 대해 생각해 보았지만 누군가 다른 사람이 나와 너무 오랫동안 햇볕에 앉아 있었을 수도 있습니다. 그래서 도움이 될 것입니다.

관련 문제