如果我有 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 对象
请就此问题向我提出建议。欢迎任何评论。感谢
答案 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对象的工厂方法,请将该方法设为静态。