
@property (nonatomic,retain) NSMutableArray* fooList;
我用Foos填充它:
self.fooList = [NSMutableArray array];while (something) { Foo* foo = [[Foo alloc] init]; [fooList addobject:foo]; [foo release];} 第一个问题:因为NSMutableArray被标记为retain,这意味着它内部的所有对象都被保留了吗?我是否正确添加foo并在将其添加到阵列后释放本地副本?或者我错过了保留电话?
然后,如果用户选择表中的一个特定行,并且我想显示详细信息Foo视图,我调用:
FooVIEw* localVIEw = [[FooVIEw alloc] initWithFoo:[self.fooList objectAtIndex:indexPath.row]]; [self.navigationController pushVIEwController:localVIEw animated:YES];[localVIEw release];
现在FooVIEw类有:
@property (nonatomic,retain) Foo* theFoo;
所以现在数组仍然坚持Foo以及FooVIEw.但那似乎没问题吧?当用户点击后退按钮时,将在FooVIEw上调用dealloc并调用[theFoo release].然后命中另一个后退按钮,在tablevIEw类上调用dealloc并调用[fooList release].
您可能会认为FooVIEw类应该具有:
@property (nonatomic,assign) Foo* theFoo;
与保留.但有时候FooVIEw类是用一个不在数组中的Foo调用的.所以我想确保两个对象保持同一个其他对象是可以的.
解决方法 正如其他人所说,你所做的是正确的,代码对我来说是正确的.我在代码中有几十个对同一个对象的引用,只要我平衡了所有的保留和释放,一切正常.要添加更多细节……你会问:
because the NSMutableArray is marked as retain,that means all the objects insIDe it are retained too?
这是两件不同的事情.所有集合类(字典,数组,集合)都会自动保留您添加到它们中的内容,并在取消分配集合对象时释放其内容对象. (对于NSMutableArray,如果从数组中单独删除内容对象,或者在解除分配整个数组时,内容对象将被释放.)
这与集合对象本身是保留还是指定为属性无关.唯一要考虑的是,如果您对集合对象属性的策略不正确,它可能会比您想象的更早或更晚发布,并且可能会失去平衡.
正如其他人所说…阅读memory management guide,并练习. :)哦,并从这个角度阅读其他人的代码,并尝试了解他们如何/为什么进行内存管理.
另一件小事……对于每个保留属性,请确保在对象的dealloc方法中有一个释放调用.
总结以上是内存溢出为你收集整理的iphone – 多个对象可以在Objective-C/C++ocoa中保留相同的对象吗?全部内容,希望文章能够帮你解决iphone – 多个对象可以在Objective-C/C++ocoa中保留相同的对象吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)