Iphone 释放对象、内存管理、目标C
如果我有 A.h级 1.@property(非原子,保留)NSMutableArray*arr A.m级 -(A类)功能{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中,我想调用(
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+,我会修改我的响应以使其更正确。