<分区>
我有一个 block ,它使用自身的弱引用来访问 block 内的属性。访问这些属性时,我使用
__weak ViewController *weakSelf = self;
someBlock = ^{
ViewController *safeSelf = weakSelf;
weakSelf.someObject
safeSelf->someObject
}
在使用weakself时,为什么要使用点语法,对于从弱引用到强引用,要使用->语法
<分区>
我有一个 block ,它使用自身的弱引用来访问 block 内的属性。访问这些属性时,我使用
__weak ViewController *weakSelf = self;
someBlock = ^{
ViewController *safeSelf = weakSelf;
weakSelf.someObject
safeSelf->someObject
}
在使用weakself时,为什么要使用点语法,对于从弱引用到强引用,要使用->语法
最佳答案
object->iVar
语法直接访问实例变量,而不使用属性。
你应该忘记你曾经见过这个,永远不要使用它(直到你理解这个东西很冷,并在你需要它的地方找到 .01% 的边缘情况。)
该语法允许您进入另一个对象并直接访问它的实例变量,这是不好的做法。属性允许您控制对对象公共(public)接口(interface)的访问,并保持对象的封装。
__weak weakSelf 约定适用于代码块。代码块从其封闭范围捕获对变量的强引用,并可能导致保留循环,因为您的对象对该 block 具有强引用,并且该 block 通过对 self
的引用对该对象具有强引用。 .通过创建弱变量 weakSelf,您可以使 block 对拥有它的对象的引用变弱,并避免保留循环。
关于ios - 访问属性时,点语法和 "->"有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23657376/