弱自我代表

时间:2017-07-18 10:43:19

标签: ios memory-management delegates

我们知道,我们将声明一个弱的委托对象,它可以打破强引用周期:

// MyObject.h

...

@property (nonatomic, weak) id<MyDelegate> delegate;

...

// ViewController.m

...

 self.myObject.delegate = self;

...

我想知道:我们可以用强者声明委托,并为它设置一个弱自己:

// MyObject.h

...

@property (nonatomic, strong) id<MyDelegate> delegate;

...

// ViewController.m

...

__weak typeof(self) weakSelf = self;
self.myObject.delegate = weakSelf;

...

2 个答案:

答案 0 :(得分:0)

据我所知,宣称一个对象很弱,这意味着你不拥有那个对象,所以为它分配强大的代表将无法工作。

答案 1 :(得分:0)

委托是Cocoa和CocoaTouch框架中使用的通用设计模式,其中一个类将实现某些功能的责任委托给另一个。这遵循关注点分离的原则,其中框架类实现通用功能,而单独的委托实例实现特定用例。

委托属性较弱是建议,以帮助避免保留周期。为解释检查@Bary Walk ans here。但是,有些用例需要强引用,甚至是必要的。 Apple在NSURLConnection中使用它:NSURLConnection实例只能使用一次。完成后(失败或成功),它释放委托,并且由于委托是只读的,因此无法(安全地)重复使用。检查this之前的SO问题以供参考。