如何获取存储在NSMutableArray中的对象的地址?
我有这样的事情:
MyClass *__strong*_selectedobject;
在.m:
中的函数中MyClass *objReference = [_messageBoards objectAtIndex:idxInCaseOfContract];
_selectedobject = &objReference;
问题是,一旦函数完成,_selectedobject
就是nil
。
_selectedobject
是单例类中的实例变量。它适用于不在数组中的其他对象。此外,数组中的对象不是突然为零,它只是参考。
答案 0 :(得分:2)
你无法在Objective-C中获得指向数组内部位置的指针。
如果你需要在数组中保留位置,那么如果在那里写入另一个对象,你将拥有它而不是旧的,然后保存该位置的索引(如果需要也保留数组)。请注意,对数组的修改可能会使索引无效。
如果您只需要保留此时从数组中读取的对象,只需保留该对象即可。对象地址是对象指针本身,没有额外的间接。
答案 1 :(得分:1)
更新
我只是在这里发布如何在对象中存储对地址的引用(最初的问题是关于那个),但我强烈建议任何人再次考虑是否真的需要这样做:
@interface MyClass : NSObject
{
NSMutableArray* test;
__strong id* foo;
}
*foo = [test objectAtIndex:2];
原始答案
正如@ Vijay-Apple-Dev.blogspot指出你遗漏了一些非常重要的内存 - 你正在使_selectedobject指向临时变量(objReference)的地址而不是内存中的对象([_ messageBoards objectAtIndex:idxInCaseOfContract]) 。所有方法变量在它们的方法超出范围后变为nil,这就是为什么你的引用变为nil(尽管数组仍然存在且对象存在)。只是不要使用局部变量,一切都应该没问题。
旁注 - 使用地址引用而不是对象指针的目的是什么?如果你认为你已经消失了,那么你就错了,因为ARC(和MRC也有不同的工作方式);)
答案 2 :(得分:0)
MyClass * objReference是方法的局部变量。所以一旦方法完成,一切都将从记忆中消失。如果你想保留它们,那么你将它们作为实例变量保存在头文件(.h)中。
@property(nonatomic,retain) MyClass *objReference;
然后
self.objReference = [_messageBoards objectAtIndex:idxInCaseOfContract];
注意:保留对象时必须使用自点语法。否则不会工作。