100 개의 Foo 객체를 나열하는 tableview 클래스가 있다고 가정 해 보겠습니다. 그 안에 모든 객체도 유지됩니다 의미는있는 NSMutableArray가 유지로 표시되어 있으므로 :Objective-C/Cocoa에서 여러 객체가 같은 객체를 유지할 수 있습니까?
@property (nonatomic, retain) NSMutableArray* fooList;
을하고 내가 좋아하는, FOOS 그것을 채우기 : 그것은이
self.fooList = [NSMutableArray array]; while (something) { Foo* foo = [[Foo alloc] init]; [fooList addObject:foo]; [foo release]; }
첫 번째 질문? 배열에 추가 된 후 foo를 올바르게 추가하고 로컬 복사본을 릴리스 했습니까? 아니면 전화를받지 않습니까? 그런 다음
사용자가 테이블에있는 하나 개의 특정 행을 선택하고 내가 전화를 상세 푸보기를 표시하려면 : BOTH 지금
@property (nonatomic, retain) Foo* theFoo;
을 너무 :
FooView* localView = [[FooView alloc] initWithFoo:[self.fooList objectAtIndex:indexPath.row]]; [self.navigationController pushViewController:localView animated:YES]; [localView release];
이제 FooView 클래스가를 배열은 그 FooView뿐만 아니라 그 FooView를 잡고 있습니다. 하지만 괜찮아 보이니? 사용자가 뒤로 버튼을 누를 때 dealloc은 FooView에서 호출되고 [theFoo release]가 호출됩니다. 그런 다음 다른 뒤로 버튼이 눌려지고 dealloc이 tableview 클래스에서 호출되고 [fooList release]가 호출됩니다.
당신은 FooView 클래스가 있어야한다고 주장 있습니다
@property (nonatomic, assign) Foo* theFoo;
대 유지한다. 그러나 때때로 FooView 클래스는 배열에도없는 Foo와 함께 호출됩니다. 그래서 두 개의 객체를 같은 다른 객체에 고정시키는 것이 괜찮은지 확인하고자했습니다.
Typo : "... 컬렉션 개체가 해제 될 때 해당 콘텐츠 개체를 해제하십시오." 콜렉션의 오브젝트는 콜렉션이 * deallocated * 될 때까지 해제되지 않습니다. – JeremyP
고마워요. 당신이 "release"함으로써 "retain count가 dealloc을 트리거하는 0이되는 마지막 릴리즈"를 의미한다고 주장 할 수도 있지만, 단지 dealloc이 그 맥락에서 더 명확하다는 것을 말합니다. – Jaanus