objective-c – 当NSArray元素被释放时会发生什么?
假设我创建了一些对象并将它们添加到数组中.
House *myCrib = [House house]; House *johnHome = [House house]; House *lisaHome = [House house]; House *whiteHouse = [House house]; NSArray *houses = [NSArray arrayWithObjects: myCrib,johnHome,lisaHome,whiteHouse,nil]; 通常,所有House对象的保留计数为2,但它们将被自动释放一次.过了一会儿,我决定释放myCrib,即使我不是主人 – 我从未保留或初始化. [myCrib release]; 保留计数应该降为零,我的对象应该被释放.我现在的问题是:这种非法行为会导致我的应用程序错误地工作甚至崩溃,或者NSArray会简单地从列表中删除我的对象,结果不好. 我正在寻找一种维护对象列表的方法,但我希望列表能够自我维护.当某个对象消失时,我希望它的引用能够优雅地自动地从我的数组中消失.我正在考虑子类化或包装NSArray. 谢谢. 解决方法
如果您不是所有者,则不应释放myCrib.这样做违反了内存管理准则,并且会使您的代码难以维护.我不能强调你绝对不应该在任何情况下这样做.你要求崩溃;数组已声明对象的所有权,并且您不得以任何方式破坏该所有权.
所以这里的答案是:你的代码绝对错误,你应该修复它.如果你无法修复它,你应该删除它并重新开始并继续重写它,直到你想出另一种方法来实现相同的效果而不破坏对象的所有权.我保证这是可能的. 如果您想要的是一个弱引用数组,那么有几种方法可以做到这一点(这个was just asked a couple of days ago): > NSPointerArray – 弱引用其指针.当您使用垃圾收集时,它们会自动清零(即,在取消分配对象时,指针会被删除).不幸的是,这在iOS上不可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |