我确实习惯了写
__weak typeof( self ) wself = self
[smth doSomeBlock:^(void) {
__strong typeof( wself ) sself = wself;
[sself callAny];
}]
所以我避免保留周期
但是当嵌套多个块时该怎么办?
__weak typeof( self ) wself = self
[smth doSomeBlock:^(void) {
__strong typeof( wself ) sself = wself;
[sself doSomeBlock:^(void) {
// wself, or sself? my mind is blown
// what if another block?
}];
}]
答案 0 :(得分:3)
你的第一个例子看起来像是在浪费你的努力。保留周期没有问题,除非:self
拥有smth
并且smth
拥有块并且在self
被销毁之前您不会销毁块。如果其中任何一个不成立,就没有理由去做弱/强舞。
第二种情况是相同的:嵌套不会改变任何东西。是否有从self
到Block的所有权链?如果不是,那么使用哪一类指针并不重要。