Iphone 释放对象、内存管理、目标C

Iphone 释放对象、内存管理、目标C,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,如果我有 A.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中,我想调用(

如果我有 A.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中拥有的varClassA如何,我应该在什么时候释放它,以便在ClassB的第3行回调后,我仍然拥有ClassA的对象,其arr包含nameofaObject对象


请在这个问题上给我一些建议。欢迎在此发表任何意见。谢谢

将其添加到自动释放池。i、 e.
返回[obj自动释放]。这将确保在运行循环迭代结束时,如果对象不再有任何所有者,则向其发送一条发布消息。

将其添加到自动释放池。i、 e.
返回[obj自动释放]。如果对象不再有任何所有者,这将确保在运行循环迭代结束时向其发送一条
release
消息。

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


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

只要您有一个
alloc
,您就需要一个相应的
版本来匹配它


在使用LLMV编译器(并且启用ARC)的XCode 4.2+中,您不必担心引用计数,因此当您
alloc
对象时,您不必担心调用
release
,事实上您不能,因为编译器将抛出错误。

如果使用手动保留版本: 分配2个classA对象。一个是直接从classB函数分配,另一个是在该函数内调用classA函数。所以,当第3行执行时,您会破坏第一个classA对象上的链接(overwrite classAinB var),这是内存泄漏。
如果您希望使用返回classA对象的factory方法,请将该方法设置为静态。

如果您使用manual retain release: 分配2个classA对象。一个是直接从classB函数分配,另一个是在该函数内调用classA函数。所以,当第3行执行时,您会破坏第一个classA对象上的链接(overwrite classAinB var),这是内存泄漏。
如果您希望使用返回classA对象的factory方法,请将该方法设置为静态。

how-id about:classA*obj=[[classA alloc]init]autorelease];。它的意思是返回[[obj autorelease]];你也可以这样做。它做同样的事情,因为它都是在同一个运行循环迭代中完成的;。它的意思是返回[[obj autorelease]];你也可以这样做。它做同样的事情,因为它都是在同一个运行循环迭代中完成的。我想你的意思是,如果启用了ARC,而不是ios5+,我会修改我的响应以使其更正确。我想你的意思是,如果启用了ARC,而不是ios5+,我会修改我的响应以使其更正确。