를 공개하지 않는 이유는 같은 일부 코드가 있습니다반환 값이
- (SendFileInfo *)sendFileInfoForName:(NSString *)name {
for (SendFileInfo *sendFileInfo in sendArray)
{
if ([sendFileInfo.name isEqualToString:name])
{
return sendFileInfo;
}
}
return nil;
}
그래서이 방법의 반환 값은 SendFileInfo의/해제를 보유 이벤트를 추적 할 수 autorelease.I 사용 도구가 될 것입니다 때로는 SendFileInfo 것 다음과 같이 자동 출시 후 출시 :
Retain/Autorelease/Release (3) 00:48.146.622 ipjsua -[SendFileQueue sendFileInfoForName:]
Retain +1 5 00:48.146.622 ipjsua -[SendFileQueue sendFileInfoForName:]
Autorelease 00:48.146.627 ipjsua -[SendMessageViewController refreshSendFileView:]
Release -1 4 00:48.155.558 GraphicsServices GSEventRunModal
가끔씩 출시 조치가 없으므로이 개체의 메모리가 해제되지 않습니다. 결국
Retain/Autorelease (2) +1 00:46.996.752 ipjsua -[SendFileQueue sendFileInfoForName:]
Retain +1 2 00:46.996.752 ipjsua -[SendFileQueue sendFileInfoForName:]
Autorelease 00:46.996.756 ipjsua -[SendMessageViewController refreshSendFileView:]
는 SendFileInfo 오브젝트의 레퍼런스 카운트 (오토 릴리즈 후 해제하지 않음) sendFileInfoForName 메소드가 호출 될 때와 동일하다. 메모리 누수! 릴리스 이벤트는 언제 발생합니까? 릴리스 이벤트가 같은 방법으로 발생하지 않는 이유는 무엇입니까?
반환하는 객체는 컨테이너 객체가 보유하고있는 것으로 알려져 있으므로 해당 코드가 추가로 보유하지 않아도됩니다. 위의 추적 정보를 실제로 보면 두 번째 경우에 위의 코드 외부에있는 GraphicsServices의 릴리스가 누락 된 것을 볼 수 있습니다. –
(저는 GraphicsServices에 익숙하지 않지만 어떻게 든 이벤트 핸들러를 사용하거나 문제 객체를 "데이터"값으로 사용할 수 있습니다.) 해당 이벤트 핸들러가 트리거되지 않았거나 취소 된 경우 객체가 유지됩니다. –