iOS 开发大大们,对于这种不使用 property 的写法,是怎样看待的?是否认同? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BoBoy
V2EX    iOS

iOS 开发大大们,对于这种不使用 property 的写法,是怎样看待的?是否认同?

  •  
  •   BoBoy 2017-02-08 10:57:38 +08:00 4045 次点击
    这是一个创建于 3182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是我一个同事写的,超喜欢使用这个方式来定义全局属性,反正我是感到无语。 因为他是项目老人,也没人去说这种事情到底是不是应该这样做,没一点规范,醉了。

    39 条回复    2017-02-09 11:28:02 +08:00
    lltctt
        1
    lltctt  
       2017-02-08 11:00:00 +08:00
    图呢...
    BoBoy
        2
    BoBoy  
    OP
       2017-02-08 11:05:41 +08:00
    @lltctt 有的。
    BoBoy
        3
    BoBoy  
    OP
       2017-02-08 11:06:52 +08:00
    #import "KBScanMaskView.h"
    #import <Masonry.h>

    @interface KBScanMaskView ()
    {
    CAShapeLayer *_shapeLayer;
    CGRect _cutoutRect;

    UIView *_leftTopCorner_hor_view;
    UIView *_leftTopCorner_ver_view;

    UIView *_rightTopCorner_hor_view;
    UIView *_rightTopCorner_ver_view;

    UIView *_leftBottomCorner_hor_view;
    UIView *_leftBottomCorner_ver_view;

    UIView *_rightBottomCorner_hor_view;
    UIView *_rightBottomCorner_ver_view;
    NSMutableArray *_stripes;

    UILabel *_promptLabel;

    UIView *_redLine;
    NSTimer *_timer;
    }

    @end
    kera0a
        4
    kera0a  
       2017-02-08 11:08:38 +08:00
    看变量的类型和作用~ 没感觉有啥问题~
    BoBoy
        5
    BoBoy  
    OP
       2017-02-08 11:17:19 +08:00 via iPhone
    @kera0a 不论什么类型,我都不推荐这样写, 苹果官方也没见有这种写法。
    a412739861
        6
    a412739861  
       2017-02-08 11:18:02 +08:00
    以前的代码应该都是这么写的。不过这么写有一个问题
    coldmn3
        7
    coldmn3  
       2017-02-08 11:18:52 +08:00
    iVar 没有什么问题啊,也许只是看着不够"Modern"吧
    a412739861
        8
    a412739861  
       2017-02-08 11:18:53 +08:00
    @a412739861 #6 怎么就发出去了…………
    需要写 weak 的时候,感觉特别嗦,尤其是要调用多个实例变量的时候。
    Creolophus
        9
    Creolophus  
       2017-02-08 11:24:18 +08:00
    这样写如果需要调用这些变量的 set 和 get 方法就很麻烦了吧......
    lltctt
        10
    lltctt  
       2017-02-08 11:42:13 +08:00
    我是来吐槽命名的...
    SeanChense
        11
    SeanChense  
       2017-02-08 11:46:38 +08:00
    所以楼主认为这样有什么错呢?至少这得说清楚吧。
    junyixin
        12
    junyixin  
       2017-02-08 11:50:16 +08:00
    #10 +1
    kera0a
        13
    kera0a  
       2017-02-08 11:51:50 +08:00
    @BoBoy 阅读过很多知名开源库,都有这种写法~~

    个人理解,这种变量,就是个私有变量的指针引用~ 不会有其他作用 ,不需要 get set 方法,不需要属性修饰符那些功能
    hohoho
        14
    hohoho  
       2017-02-08 11:55:37 +08:00
    如果项目强制这种格式那就服从或者说服领导从现在开始用 property 代替吧,如果不强制你可以自己用 property 格式去写。

    毕竟这个也不算错,就如楼上说的不够 modern ,有得人确实比较怀旧而不愿改变,而且有得人会认为用 property 会发送 get/set message 影响性能。强制改变别人的习惯挺难的。
    SeanChense
        15
    SeanChense  
       2017-02-08 11:58:14 +08:00   1
    @kera0a “不需要属性修饰符”不准确,默认是被 `__strong` 修饰。
    loveuqian
        16
    loveuqian  
       2017-02-08 12:00:38 +08:00
    直接调用 _ 变量和调用 set/get 已经没有明显性能差距了吧
    就算你用 property 来写,一样可以使用 _ 来调变量啊

    只能说这种写法,我接盘的这个 14 年的项目,也有。。。

    //
    // ***AppDelegate.m
    //
    // Created by *** on 3/16/14.
    // Copyright (c) 2014 ***. All rights reserved.
    //
    shawngao
        17
    shawngao  
       2017-02-08 12:12:26 +08:00
    我是来猜功能的,二维码扫描?
    DSKcpp
        18
    DSKcpp  
       2017-02-08 12:35:22 +08:00
    对于暴露在外的我一律用 property ,私有的看情况是否需要 property ,反正我是这样写的,我看很对著名开源库都用了这种方法
    xi_lin
        19
    xi_lin  
       2017-02-08 12:44:38 +08:00
    老写法是这样的
    xuyuheng0905
        20
    xuyuheng0905  
       2017-02-08 12:45:13 +08:00
    内部属性我个人也是倾向于这种做法,除非有特殊需要,如支持 copy 等,对外属性一律 property 。
    xuyuheng0905
        21
    xuyuheng0905  
       2017-02-08 12:46:21 +08:00
    目前组内项目我也是建议这样写。
    jayzjj000
        22
    jayzjj000  
       2017-02-08 12:47:31 +08:00
    div class="reply_content">前两个变量和最后三个变量是后来加的把。。。
    nicevar
        23
    nicevar  
       2017-02-08 13:18:14 +08:00
    这就是原本规范的写法,这个锅不要丢给你同事,丢给苹果最合适,你去翻翻早期的源码就知道了
    nicevar
        24
    nicevar  
       2017-02-08 13:19:45 +08:00
    12 年之前的项目都这样写,你去翻翻 bat 早期的 sdk 也能看到
    zyqhi
        25
    zyqhi  
       2017-02-08 13:48:49 +08:00
    命名有点恶心
    Heavytiger
        26
    Heavytiger  
       2017-02-08 14:07:31 +08:00
    反正我看不惯。
    hekunhotmail
        27
    hekunhotmail  
       2017-02-08 15:16:08 +08:00
    没毛病, 你要适当引导他,要有方法,合作最重要的是沟通,然后达成共识,在沟通,在达成共识
    vincentxue
        28
    vincentxue  
       2017-02-08 15:50:31 +08:00
    以前老项目还是实例变量更多一点,向外传值才在 .h 里写 property 的。不过变量命名一直都是驼峰,这个不合规范。

    全部采用 property 好像是 13 、 14 年才开始普及的,这项目老的话也没啥问题。

    property 对于实例变量是有多一点点损耗的,看取决了,也并不是一定全部要用 property ,你看 FB 开源的那些项目,依然很多用实例变量。
    LINAICAI
        29
    LINAICAI  
       2017-02-08 15:55:23 +08:00 via iPhone
    这是个二维码扫描功能..!
    ostholz
        30
    ostholz  
       2017-02-08 16:43:21 +08:00
    纯个人习惯问题, 对于不想暴露给外部的变量, 我都是喜欢用 iVar 定义.
    SorcererW
        31
    SorcererW  
       2017-02-08 17:41:29 +08:00
    如果以后要把其中一些变为公有,或者要写 setter/getter ,那么就还得改成 property 了。
    DingSoung
        32
    DingSoung  
       2017-02-08 17:48:33 +08:00
    看见这样的代码 简直要吐, 还有,不喜欢用第三方库布局
    game3108
        33
    game3108  
       2017-02-08 18:20:08 +08:00
    要看是内部使用还是外部使用。如果都是内部使用的话,这样未尝不可,好处是不需要去思考 getter 和 setter 方法,清晰明了,坏处是无法用 kvo 。不过你内部变量在内部 kvo 这种设计思路本来就有问题。
    whitenight
        34
    whitenight  
       2017-02-08 18:20:25 +08:00
    要看写在哪里,在 H 文件里不支持这种写法,在 M 文件里支持这样写
    acumen
        35
    acumen  
       2017-02-08 20:51:15 +08:00
    在我司的项目里有些页面也有这样的写法, 也不是不可取吧,至少也是一目了然是私有变量。公司的项目迭代,主导项目的人变了,对项目的代码规范都会有影响吧。每个时期的规范不同,也不能怪谁咯。
    vxees
        36
    vxees  
       2017-02-09 07:58:02 +08:00 via iPhone
    老写法了。不过还是推荐 proproperty 。不过看见这种命名就蛋疼。
    xiubin
        37
    xiubin  
       2017-02-09 09:28:34 +08:00
    说不得是方便子类继承的私有变量了。。。 233333~
    guomiaoyou7784
        38
    guomiaoyou7784  
       2017-02-09 10:17:48 +08:00
    写法没有问题的,不使用 Property 自动生成 getter 和 setter 这个看个人喜好。部分命名应该要驼峰的
    xi_lin
        39
    xi_lin  
       2017-02-09 11:28:02 +08:00
    @game3108 请问内部变量在内部 kvo 为啥不好?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 03:02 PVG 11:02 LAX 20:02 JFK 23:02
    Do have faith in what you're doing.
    ubao msn 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