0

如果我有 ClassA.h

1.@property(非原子,保留)NSMutableArray *arr;

类A.m

-(A类)函数{

    1.ClassA *obj = [[ClassA alloc] init]; 
    // initialize the arr
    // add another object into the arr
    2. [obj.arr addObject:nameOfAnObject]
    3. return obj; 

}

在ClassB,我想调用(ClassA)函数方法。我要做的是

B类.m

-(无效)viewDidload {

  1.[super viewDidLoad];
  2.ClassA     *classAinB = [[classA alloc] init];                                                                        
  3.classAinB = [classA function];
  4.[classAinB release];

}

根据内存管理的规则,因为我在ClassB.m中拥有一个ClassAinB,所以最后释放了它。

我的问题是我在 ClassA.m 中拥有的 var ClassA怎么样,我应该什么时候释放它,以便在 ClassB 的第 3 行回调后,我仍然拥有 ClassA 的对象,其 arr 包含nameOfAnObject对象

请就这个问题给我建议。欢迎任何意见在这里。谢谢

4

3 回答 3

2

将其添加到自动释放池中。即return [obj autorelease];release如果对象不再有任何所有者,这将确保在运行循环迭代结束时向对象发送消息。

于 2012-05-08T14:07:32.270 回答
1

如果您使用手动保留释放:您分配 2 个 A 类对象。一个 - 当您直接从 classB 函数分配它时,另一个 - 当您在该函数内调用 classA 函数时。因此,当第 3 行执行时,您会破坏第一个 classA 对象上的链接(覆盖 classAinB var),这是内存泄漏。如果您希望使用返回类 A 对象的工厂方法,请将该方法设为静态。

于 2012-05-08T14:13:32.017 回答
1

任何时候你都alloc需要一个对应release的来匹配它。

在带有 LLMV 编译器(并启用 ARC)的 XCode 4.2 + 中,您不必担心引用计数,所以当您alloc是一个对象时,您不必担心调用release,事实上您不能,因为编译器会抛出错误。

于 2012-05-08T14:09:33.003 回答