我正在使用像
这样的代码段if ([Array count] != 0) {
Array = nil;
}
Array = [[NSMutableArray alloc]init];
使用ARC时是否允许这样做?这会导致任何类型的崩溃吗?为什么我这样做是每次调用我的方法时Array
获取一组新数据。我在班上很多地方都使用这种片段。
答案 0 :(得分:10)
nil
,然后立即分配给其他人。这与将其分配给其他东西没有什么不同。
在ARC之前,如果变量具有先前值,则会给您内存泄漏(无论是否分配给nil
)。使用ARC,没有泄漏。
答案 1 :(得分:3)
最佳解决方案:自己测试和看看!这是一个非常简短的例子!
但是,这当然有效!
ARC表示自动引用计数。它只是说你不必关心release
,retain
等等。
如果你想让一个对象为nil,你仍然可以,因为这是一个简单的指针赋值!
关于你的代码,在重新分配之前你将Array设置为nil!
尝试获取代码的逻辑:
如果我的数组有对象
Then Array point to a new nil object
但在所有情况下你都这样做:
My Array指向一个新的NSMutableArray对象
因此,无论您的条件是否被评估为真,您的代码都是无用的,因为变量将在之后获取另一个值!
答案 2 :(得分:0)
您展示的示例代码有效。以下是一些变体:
if ([Array count] != 0) {
Array = [[NSMutableArray alloc] init];
}
示例2:
if ([Array count] != 0) {
Array = [NSMutableArray array]; //value will be retained
}
示例3:
if ([Array count] != 0) {
self.Array = [[NSMutableArray alloc] init]; //Will NOT leak under ARC.
}
示例4:
//if ([Array count] != 0) {
[Array removeAllObjects];
//}
所有四个例子在ARC下都有效。
另一件事:实例变量通常首字母小写,但仍然遵循CamelCase方法。另一种方法是在变量名称前加上下划线:如果您没有@synthesize
方法来匹配@property
值,则会执行此操作。