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 了

时间: 2024-10-23 04:03:44

iOS初学,关于变量加下划线问题的相关文章

把骆驼命名法的变量,变为大写字母变小写且之前加下划线

/** * 把骆驼命名法的变量,变为大写字母变小写且之前加下划线 * * @param str * @return */ public static String toUnderline(String str) { str = StringUtils.uncapitalize(str); char[] letters = str.toCharArray(); StringBuilder sb = new StringBuilder(); for (char letter : letters) {

android如果给TextView或EditText的email链接加下划线,并在点击在email连接上可以弹框显示

如何把textview的一些文字加上背景色: Spannable str = new SpannableString("#fdsfdfsdfdsfd#"); Matcher matcher = getEmailPattern().matcher((CharSequence) str); while (matcher.find()) { int start = matcher.start(); int end = matcher.end(); str.setSpan(new Foregr

ASP.NET 导出Excel时,某单元格内一部分文字加粗加下划线

一.简述 在项目中的某个导出Excel的功能就需要在某个单元格中使一部分文字加粗和加下划线. 二.内容 在这个导出Excel的功能里用到了 Microsoft.Office.Interop.Excel 这个类库. 然后操作单元格: Microsoft.Office.Interop.Excel.Range cells = (Microsoft.Office.Interop.Excel.Range)xlsWorkSheet.Cells; cells["1", "A"]

IOS UIlabel 、UIButton添加下划线

1.给UILabel 添加下划线 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 100)]; label.backgroundColor = [UIColor redColor]; label.numberOfLines = 3; NSMutableAttributedString *content = [[NSMutableAttributedString alloc]initWithString

给UILabel 或者 UIButton标题加下划线

方法一: [objc] view plaincopyprint? NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"查看所有中奖记录"]; NSRange strRange = {0,[str length]}; [str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInte

[办公应用]如何将单词中的部分字母加下划线

同事要实现将单词中的部分字母加下划线. 第一种方法大致思路如下: 将要设置的格式设置好.例如HER: 然后复制: 然后ctrl+H调出替换对话框,要查找的内容中输入HER: 要替换的中输入 ^c 即可. 第二种方法,也可以分两步做: 先查找HER,查找时,"在以下项中查找"选中主文档, 再替换E为下划线格式. "搜索"处选中向下. 参考资料 更多的高级搜索需要用到正则表达式.可以参考微软官方网站: http://office.microsoft.com/zh-cn/

android里TextView加下划线的几种方式

如果是在资源文件里: <resources> <string name="hello"><u>phone:0123456</u></string> <string name="app_name">MyLink</string> </resources> 如果是代码里: TextView textView = (TextView)findViewById(R.id.tv_t

Markdown - 如何给文本加下划线

解决方法 Markdown可以和HTML的语法兼容,可以通过HTML的标签来实现效果: 写法 效果 <u>下划线</u> 下划线 这里解释下,u指的是underline下划线. 附注 尽量不要给文本加下划线,因为这会和超链的表现形式混淆,会被误以为是个超链. 参考链接 HTML 标签 原文地址:https://www.cnblogs.com/yulinlewis/p/10122232.html

ios下划线变量:为什么变量前要加下划线才有用?

先看一段代码. 复制代码 appdelegate.h @property (weak) IBOutlet NSMatrix *StockType; @property (weak) IBOutlet NSMatrix *market; appdelegate.m NSCell *st=[market selectedCell]; 编译时,总是提示,找不到market变量,但是StockType却没问题. 如果根据系统建议,在market前加上下划线,变成_market却可以正常编译和执行.  但