iphone – 多个对象可以在Objective-CC++ocoa中保留相同的对象吗?

iphone – 多个对象可以在Objective-CC++ocoa中保留相同的对象吗?,第1张

概述假设我有一个列出100个Foo对象的tableview类.它有: @property (nonatomic, retain) NSMutableArray* fooList; 我用Foos填充它: self.fooList = [NSMutableArray array];while (something) { Foo* foo = [[Foo alloc] init]; [foo 假设我有一个列出100个Foo对象的tablevIEw类.它有:

@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中保留相同的对象吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1019415.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存