【发布时间】:2011-09-22 16:15:38
【问题描述】:
下面的代码会不会导致问题?
- (void) method1 {
NSMutableArray *myArray = [[[NSMutableArray alloc] init] autorelease];
... fill the array
[someObject someMethod:myArray]; // someObject does work on that array (without retain!)
}
我的应用有时会出现崩溃,这似乎是个问题;但我不明白...... myArray 不应该至少在方法1结束之前保持活力吗?
非常感谢您的帮助!
所以除了“这可能是个问题”之外,我的问题是: - 删除自动释放并在方法结束时进行释放就足够了吗? - 如果不是:我是否必须在“someMethod”中进行保留/释放?
编辑:但这可能是个问题,对吗?
- (void) method1 {
NSMutableArray *myArray = [self getArray];
... fill the array
[someObject someMethod:myArray]; // someObject does work on that array (without retain!)
}
- (NSMutableArray) method2 {
return [[[NSMutableArray alloc] init] autorelease];
}
【问题讨论】:
-
Cocoa 的所有权规则指定接收到的对象应该在调用方法的整个范围内保持有效,除非您执行以下两种操作之一:(1) 从集合中删除对象或 (2) 释放“父对象”。见Avoid Causing Deallocation of Objects You’re Using
标签: objective-c memory-management