解释下这行代码的作用或者含义?

2016-01-06 19:25:20 +08:00
 LMkillme


图中划红线的那一行,对我来说类似「 我家门前有两棵树,一棵是枣树,另一棵也是枣树。」,完整代码 https://github.com/zwaldowski/AdvancedCollectionView
4013 次点击
所在节点    iDev
17 条回复
morefreeze
2016-01-06 19:57:05 +08:00
似乎以后都可以少打 4 个字符?
LMkillme
2016-01-06 20:02:25 +08:00
@morefreeze 实际上是多打了几十个字符……
kevinzhwl
2016-01-06 20:04:50 +08:00
不熟 oc ,是不是前面是局部变量,后面是成员变量?
这样还是有点现实意义的,方便。
效率上编译器应该会优化的
noli
2016-01-06 20:07:05 +08:00
非要细究的话,可能的考虑就是 在
dataSource registerReusableViewsWithCollectionView: 之前可能会被另外一个线程改变 self.collectionView
LMkillme
2016-01-06 20:27:26 +08:00
@kevinzhwl 前面是局部变量,后面是成员变量。
「方便」体现在哪里呢?编译器优化又是?
LMkillme
2016-01-06 20:29:14 +08:00
@noli 另一个线程改变了 self.collectionView ,那此处的 collectionView 所指向的 collectionView 也是变了呀。
LMkillme
2016-01-06 20:33:32 +08:00
@noli 哦,我大概明白你的意思了,是指 self.collectionView 改变了指向?
fly2never
2016-01-06 21:56:12 +08:00
如果方法内用到了几十次 self.collectionView, 那么这么节省一下字符是有意义的
LMkillme
2016-01-06 22:45:36 +08:00
@fly2never 然而并没有
josephshen
2016-01-06 23:09:41 +08:00
经常这样写,一是如果函数长可以少打点字,二是这样去掉 self 后肉眼 parser 更连贯,三是如果这样写能让右边段落对齐或者长短有秩的话、看上去更美就这样写
iyeatse
2016-01-07 01:11:38 +08:00
苹果官方的例子有很多地方这么写,我就学着这么写了。
脑洞一下,除了看起来整齐以外,每次调用 self.collectionView 实际上都是调用了一次 selector ,执行效率上可能会有问题。。?
canautumn
2016-01-07 01:49:30 +08:00
每次调用 property getter 会有额外开销,有人实际对比测试过,但其实因为额外开销只有你重复调用成千上万次才比较显著。即使想避免额外开销,也可以直接调用 Instance Variable (下划线开头的)而不用再赋值一次指针。根据 Effective Objective-C 2.0 ,内部访问成员变量时推荐在读取时直接访问 Instance Variable ,而写入时访问 property ,以获取性能和封装性的最佳平衡。

当然了,写成这样也不错,肯定也有他的理由,但我觉得只是风格不同罢了。
canautumn
2016-01-07 02:03:40 +08:00
刚才只看了楼上讨论没仔细看代码,我之前说错了,这个地方应该不是风格考虑而是线程安全的考虑。 4 楼才是正解。
有一个几乎一模一样的例子,在某期 objc.io 讲 thread safe 的时候应该有提到。
LMkillme
2016-01-07 09:53:44 +08:00
@canautumn 正解,感谢。文章地址 http://objccn.io/issue-2-4/
Alchemistxxd
2016-01-15 12:29:28 +08:00
其实就是保存了一个指针,用于指向这个实例,确保在 self.property 指针被修改后也能访问到他,我以前在用 DisplayLink 的时候就踩过这种坑。
josephshen
2016-04-01 01:01:42 +08:00
我虽然不怎么写 iOS ,但是这个似乎是一个 UI 操作,无论如何 UI 操作不都是应该避免多线程的么?所以你们不觉得上面的说法是不妥的嘛?
LMkillme
2016-04-01 09:16:30 +08:00
@josephshen UIKit 本身并不是线程安全的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/248853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX