我需要一些关于如何分配、保留对象的信息。
例如 - 如果我们有两个视图控制器并且需要将数组数据从 viewcontrlr 1 传递到 viewContrl 2,我们如何将对象从视图 1 发送到视图 2 并在视图 1 中释放它并在视图 2 中保留它。
一个简单的 = 运算符只是分配再次指向视图 1 对象的地址。什么是最好的方法,以便我们可以在视图 1 中释放 obj 并在从视图 1 传递时在视图 2 中保留一个新对象。
我需要一些关于如何分配、保留对象的信息。
例如 - 如果我们有两个视图控制器并且需要将数组数据从 viewcontrlr 1 传递到 viewContrl 2,我们如何将对象从视图 1 发送到视图 2 并在视图 1 中释放它并在视图 2 中保留它。
一个简单的 = 运算符只是分配再次指向视图 1 对象的地址。什么是最好的方法,以便我们可以在视图 1 中释放 obj 并在从视图 1 传递时在视图 2 中保留一个新对象。
在视图控制器 2 中创建一个 NSMutableArray 并为其声明一个保留属性。
@interface VC2 : UIViewController
{
NSMutableArray *mutableArrayInVC2
}
@property (nonatomic, retain) NSMutableArray *mutableArrayInVC2
然后在您的视图控制器中,您可以通过以下方式传递它:
viewController2Instance.mutableArrayInVC2 = mutableArrayInVC1
并且通过以下方式释放它是安全的:
[mutableArrayInVC1 release];
[编辑以发表您的评论]
当您为 mutableArrayInVC2 声明一个保留属性并将 mutableArrayInVC1 传递给它时,“在幕后”您正在通过其 setter 方法访问该变量,如下所示:
-(void)setMutableArrayInVC2:(NSMutableArray *)arrayValue
{
[arrayValue retain]; // This is your mutableArrayInVC1
[mutableArrayInVC2 release]; // This is nil the first time you access it which is cool - we can send messages to nil in ObjC
mutableArrayInVC2 = arrayValue; // So basically you end up doing and assignment but only after retaining the object so it is pointing to the same memory address BUT it is now 'owned' by your VC2 instance.
}
希望这是有道理的!罗格
此外,您可能想查看这篇文章,了解有关保留计数机制的一般信息。它与Cocoa Programming for Mac OS X中的内容非常相似,IMO 通常是关于 Cocoa 和 Obj-C 的最佳介绍书籍之一。我不确定您对 Obj-C/Cocoa 有多少经验,但如果您正在寻找那种介绍,那么这是一个很好的起点。