NSMutable数组 - 分配和保留对象

时间:2011-02-21 00:10:13

标签: iphone memory-management nsmutablearray assign retain

我需要一些关于如何分配,保留对象的信息。

例如 - 如果我们有两个viewcontrollers并且需要将一个数组数据从viewcontrlr 1传递给viewContrl 2,我们如何将视图1中的对象发送到视图2并在视图1中释放它并将其保留在视图2中。

simple =运算符只是指定再次指向查看1对象的地址。什么是最好的方法,以便我们可以在视图1中释放obj,并在从视图1传递时在视图2中保留新对象。

2 个答案:

答案 0 :(得分:2)

在视图控制器2中创建一个NSMutableArray,并为其声明一个retain属性。

@interface VC2 : UIViewController
{
   NSMutableArray *mutableArrayInVC2
} 
@property (nonatomic, retain) NSMutableArray *mutableArrayInVC2

然后在你的视图控制器中,你可以传递它:

viewController2Instance.mutableArrayInVC2 = mutableArrayInVC1

用以下方式释放它是安全的:

[mutableArrayInVC1 release];

[编辑以征求您的意见]

当你为mutableArrayInVC2声明一个retain属性并将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.
}

希望它有意义! ROG

答案 1 :(得分:0)

此外,您可能需要查看this article以获取有关保留计数机制的信息。它与Cocoa Programming for Mac OS X中的内容非常类似,IMO是关于Cocoa和Obj-C的最佳介绍书之一。我不确定你对Obj-C / Cocoa有多少经验,但如果你正在寻找那种介绍,那么这是一个很好的起点。