|
8
|
| Jesse Anderson · 技术社区 · 15 年前 |
|
|
1
17
这两个类实际上都非常脆弱,完全不同,这取决于类的客户机在做什么。使它们完全相同很容易——见下文——但使其不那么脆弱却很难。这就是延迟初始化的代价(也是为什么我通常试图以这种方式避免延迟初始化,而更愿意将子系统的初始化作为整个应用程序状态管理的一部分)。 有了#1,你就避免了设置者,因此,任何观察到变化的人都看不到变化。通过“观察”,我特别指的是键值观察(包括Cocoa绑定,它使用KVO自动更新UI)。
在这两种情况下,如果对象的初始化调用getter,则可能会出现无限递归。这包括是否有任何观察者请求将旧值作为更改通知的一部分。别那么做。 如果你要使用这两种方法,仔细考虑后果。一个有可能使应用程序处于不一致的状态,因为属性的状态更改没有通知另一个有可能出现死锁。
考虑(垃圾收集,标准Cocoa命令行工具:
这个挂不住。它喷出:
回到我之前的评论;最好的解决办法是 . 太细了。你最好在更高的层次上管理你的对象图状态,作为其中的一部分,有一个基本上是“哟!我要用这个子系统了!把那个坏孩子热起来!”这就完成了延迟初始化。 |
|
|
2
3
这些方法从不相同。第一个是对的,而第二个是对的
错误的
! 一个能干的人可能永远不会打电话来
此外,在初始化成员时,没有要观察的状态更改。你要求你的目标
|
|
|
3
1
|
|
|
4
0
这两个基本上是相同的,它真的只是由你来选择哪一个是最适合你的情况。您已经详细描述了使用属性语法的优缺点。 |
|
|
George Kim · 如何在iOS中模拟特定坐标空间中的触摸? 2 年前 |
|
|
BENG · 协调C++和Objective-C中结构的填充 2 年前 |
|
|
Community wiki · iPhone上ivar的继承问题 2 年前 |
|
|
Community wiki · 在OpenGL中显示YUV 2 年前 |
|
|
YosiFZ · pod更新依赖关系pod 2 年前 |
|
|
Community wiki · 查找iOS日历 3 年前 |