我理解自动引用计数的方式是:
如果一个对象将被各种类消费,那么它应该是“强”类型,以便它保持在周围而其他人可能正在使用它。
如果一个对象只是一个类的内部结构,它可以是“弱”类型,因为一旦处理完当前的类实现它就会消失。
还有更多吗?
这是我想象的一个例子:
#import "World.h"
@interface Foo : NSObject
@property (nonatomic, strong) NSArray *barArray;
@property (nonatomic, weak) NSString *bazString;
@end
@implementation Foo
-(void)sendTheArrayIntoTheWorld {
self.barArray = [NSArray arrayWithObject:@"lonely item"];
[World takeTheArray:self.barArray]; // array is strong so it can exist indefinitely
}
-(void)useThatString {
self.bazString = "weak old string"; // string is weak because it should be discarded when it's no longer needed here...
}
@end
答案 0 :(得分:0)
这不是ARC的工作方式。归结为:
strong
引用才能保持活动weak
属性而不在其他位置引用它将导致其立即释放,与bazString
一样。如果你在为它分配一个值后尝试访问该字符串(除非它被另一个对象拥有,就像数组一样,它不是你的情况),你会发现它是nil
。这意味着弱引用应该用于您不一定“控制”的对象,如委托。如果您对委托使用强引用,并且委托对您有强烈的引用,那么这两个对象都不会被释放。这称为保留周期。
如果您需要一个对象保持活着,直到完成它,请使用strong
。否则,请使用weak
。
您可以阅读有关ARC here的复杂性和功能的更多信息。