V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BoBoy
V2EX  ›  iOS

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

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

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

    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
    前两个变量和最后三个变量是后来加的把。。。
    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   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.