ARC 라이브러리를 사용하는 비 ARC 프로젝트가 있습니다. 라이브러리 메서드에서 반환 된 객체를 해제해야하는지 혼란 스럽습니다. 여기에 몇 가지 예가 나와 있습니다 :비 ARC 코드에서 ARC 메소드 호출
- (void)test{
LibObject* obj1 = [[LibObject alloc] init];
LibObject* obj2 = [obj1 otherObj];
[obj1 release]; //should I release it?
[obj2 release]; //should I release it?
}
객체가 자동 풀에 저장되어 있다면 잘 보관 해 두어야합니다. 그렇지 않으면, 나는 그것을 풀어야한다.
그러나, the ARC document는 모든 지역의 범위를 잎 한 다음 유지 밖으로 균형,
같은 함수 또는 메소드에서 반환 ARC는 return 문의 평가 지점의 값을 유지 말한다 이 값이 호출 경계를 넘어 서도록 보장합니다. 최악의 경우, 이것은 autorelease를 포함 할 수 있지만 호출자는 그 값이 실제로 autorelease 풀에 있다고 가정해서는 안됩니다.
문서는 자동 릴리스 된 것으로 가정 할 수 없으므로 항상 객체를 릴리스해야 함을 의미합니까?
'retainCount'가 autorelease 상태 나 언더 스레드 (내부 구현 세부 사항)의 활동을 반영하지 않기 때문에 실제로는 아무 것도 증명하지 않습니다. 우연의 결론은 정확합니다. – bbum
@bbum 당신이 내 코드를 잘못 이해했습니다. retainCount는 아무것도 표시하지 않습니다. 데모 코드는 밑받침 autorelease 수영장이 우리를 위해 마법을 일으켰다는 것을 증명합니다. – howanghk
그런 다음 왜 retainCount가 있습니까? 반환 된 값은이 컨텍스트에서는 유용하지 않습니다. – bbum