发布一个对象,内存管理,Objective C

时间:2012-05-08 13:59:53

标签: iphone objective-c memory-management

如果我有 ClassA.h

  

1. @ property(nonatomic,retain)NSMutableArray * arr;

ClassA.m

  

- (ClassA)函数{

    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)函数方法。我的工作是

ClassB.m

  

- (void)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 对象

请就此问题向我提出建议。欢迎任何评论。感谢

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

只要您有alloc,就需要相应的release来匹配它。

在XCode 4.2 +中使用LLMV编译器(并启用了ARC),您不必担心引用计数,因此当您alloc一个对象时,您不必担心调用{{1实际上你不能,因为编译器会抛出一个错误。

答案 2 :(得分:1)

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