ios - 访问属性时,点语法和 "->"有什么不同

标签 ios objective-c objective-c-blocks

<分区>

我有一个 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/

相关文章:

ios - 如何在键盘隐藏上为 UITableView 设置动画?

ios - '-[__NSDictionaryI 长度] : unrecognized selector sent to instance' - trying to figure out why

objective-c - 如何在主队列或线程上分派(dispatch)带有参数的 block

ios - 开发人员可以创建应用程序的最低 iOS 版本是多少?

ios - 如何获取我的框架代码的 bundle ?

objective-c - 将纬度和经度转换为米或公里

objective-c - QTMovie 设置速率问题

iphone - 完成按钮仅适用于数字键盘

ios - 在 NSOperation completionBlock 中时,animateWithDuration 无法正常运行

objective-c - ARC 会告诉我什么时候必须使用 __block 吗?