zoukankan      html  css  js  c++  java
  • iOS初学,关于变量加下划线问题

    为什么做ios开发,变量前要加下划线才有用?

    看到这个哥们的解释后,终于明白了,转帖到此。 链接在此:http://www.cocoachina.com/bbs/read.php?tid=234290

    在.m实现文件中,如果使用property,必须使用 self.property 的方式调用 getter 方法。顺便说一句,其实self.property其实就是调用了getter方法。

    oc语法关于点表达式的说明:"点表达式(.)看起来与C语言中的结构体访问以及java语言汇总的对象访问有点类似,其实这是oc的设计人员有意为之。如果点表达式出现在等号 = 左边,该属性名称的setter方法将被调用。如果点表达式出现在右边,该属性名称的getter方法将被调用。"
     

    或者

    而如果想要直接实例变量,必须在 m  文件中通过 synthesize 关键字同步过来。
    所以在早期的 xcode 中(我记得应该是4之前),在.m文件中,必须手写 @synthesize 属性名 = 实例变量名 的方式,将所有属性同步
    而按照oc 的官方命名约定,为了避免变量泄漏,实例变量名一般都建议使用下划线前缀表示法,也就是如果property名称叫 abc,对应的实例变量名就定义为 _abc
    因此在.m代码中所有的property都需要手动按照 @synthesize property = _property 的方式与实例变量同步
     
    这样的写法是如此普遍,以至于xcode4 之后,编辑器添加了自动同步补全功能,只需要在 h 文件中定义 property,在编译期m文件会自动补全出 @synthesize property = _property 的代码,不再需要手写,避免了“体力代码”的手动编码
     
    但是这样要求实例变量名一定等于 "_"+属性名又不太灵活, 如果开发人员需要指定不同的属性名,就需要在 .m 文件中手动编写 @synthesize 了
     
    你的例子中,
     
    如果m中什么都不写
    xcode会默认在编译期为 market 属性,补全成 @synthesize market = _market,实例变量名为 _market
     
    如果m中指定了 @synthesize market
    xcode会认为你手动指定了实例变量名为 market ,编译期补全成:@synthesize market = market,实例变量名为 market 

    很容易验证,你在m中定义为 @synthesize market = _xyz,你在.m文件中使用的实例变量名就是 _xyz 了

  • 相关阅读:
    【引用】webkit内核浏览器支持的特殊CSS样式和CSS3.0
    catalina.home catalina.base 定义 位子 位置
    gvim 启动 全屏
    Log4j 配置文件(log4j.properties)的所在路径问题(转)
    ie6 div height bug css注意点(转)
    【引用】jdbc.properties 包含多种数据库驱动链接版本
    【引用】ActionContext和ServletActionContext介绍
    【引用】在Eclipse中将java Project转换成Dynamic Web Project
    flex查询xml字段绑定DataGrid小结
    Jquery 每天记一点200972
  • 原文地址:https://www.cnblogs.com/tibit/p/5081096.html
Copyright © 2011-2022 走看看