解释下这行代码的作用或者含义? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
LMkillme
V2EX    iDev

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

  •  
  •   LMkillme 2016-01-06 19:25:20 +08:00 4352 次点击
    这是一个创建于 3565 天前的主题,其中的信息可能已经有所发展或是发生改变。


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

    当然了,写成这样也不错,肯定也有他的理由,但我觉得只是风格不同罢了。
    canautumn
        13
    canautumn  
       2016-01-07 02:03:40 +08:00   1
    刚才只看了楼上讨论没仔细看代码,我之前说错了,这个地方应该不是风格考虑而是线程安全的考虑。 4 楼才是正解。
    有一个几乎一模一样的例子,在某期 objc.io 讲 thread safe 的时候应该有提到。
    LMkillme
        14
    LMkillme  
    OP
       2016-01-07 09:53:44 +08:00
    @canautumn 正解,感谢。文章地址 http://objccn.io/issue-2-4/
    Alchemistxxd
        15
    Alchemistxxd  
       2016-01-15 12:29:28 +08:00
    其实就是保存了一个指针,用于指向这个实例,确保在 self.property 指针被修改后也能访问到他,我以前在用 DisplayLink 的时候就踩过这种坑。
    josephshen
        16
    josephshen  
       2016-04-01 01:01:42 +08:00 via iPhone
    我虽然不怎么写 iOS ,但是这个似乎是一个 UI 操作,无论如何 UI 操作不都是应该避免多线程的么?所以你们不觉得上面的说法是不妥的嘛?
    LMkillme
        17
    LMkillme  
    OP
       2016-04-01 09:16:30 +08:00
    @josephshen UIKit 本身并不是线程安全的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6107 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 03:07 PVG 11:07 LAX 20:07 JFK 23:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86