iOS中self.xxx 和 _xxx 下划线的区别

property (nonatomic,copy) NSString *propertyName; self.propertyName 是对属性的拜访; _propertyName 是对部分变量的拜访。 其1、@property的声明中,编译器正在天生g]

@property (nonatomic,copy) NSString *propertyName;

self.propertyName 是对属性的访问;

_propertyName 是对局部变量的访问。

其一、@property的声明中,编译器在生成getter,setter方法时是有优先级的,它首先查找当前的类中用户是否已定义属性的getter,setter方法,如果有,则编译器会跳过,不会再生成,使用用户定义的方法。

也就是说你在使用self.propertyName 时是在调用一个getter方法。

self.propertyName 会让计数器+1;

其二、_propertyName,是直接调用变量,不通过getter方法。

_propertyName是类似于self->_propertyName。

用self.propertyName 是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,后者容易在block中造成循环引用。

同时,使用 _是获取不到父类的属性,因为它只是对局部变量的访问。

最后总结:self方法实际上是用了get和set方法间接调用,下划线方法是直接对变量操作。

时间: 2024-11-05 13:48:53

iOS中self.xxx 和 _xxx 下划线的区别的相关文章

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

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

OS X 和iOS 中的多线程技术(下)

OS X 和iOS 中的多线程技术(下) 上篇文章中介绍了 pthread 和 NSThread 两种多线程的方式,本文将继续介绍 GCD 和 NSOperation 这两种方式.. 1.GCD 1.1 什么是GCD GCD 全称 Grand Central Dispatch,可译为"牛逼的中枢调度器" GCD 基于纯 C 语言,内部封装了强大的函数库 1.2 使用 GCD 有什么优势 GCD 是苹果公司为多核的并行运算提出的解决方案 GCD 会自动利用更多的CPU内核 (如 二核 ,

python 里面的单下划线与双下划线的区别(私有和保护)

Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from module import *'导入 ——变量名_xxx被看作是“私有 的”,在模块或类外不可以使用.__xxx__ 系统定义名字 ——__xxx 类中的私有变量名 ——只有类对象自己能访问,连子类对象也不能访问到这个数据. 核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始.一般来讲,变量名_xxx被看作是“私有 的

python 里面的单下划线与双下划线的区别

python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线作为变量名的开始. 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下 划线作为变量名的开始.一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用. 当变量是私有的时候,用_xxx 来表示变量是很好的习

iOS初学,关于变量加下划线问题

为什么做ios开发,变量前要加下划线才有用? 看到这个哥们的解释后,终于明白了,转帖到此. 链接在此:http://www.cocoachina.com/bbs/read.php?tid=234290 在.m实现文件中,如果使用property,必须使用 self.property 的方式调用 getter 方法.顺便说一句,其实self.property其实就是调用了getter方法. oc语法关于点表达式的说明:"点表达式(.)看起来与C语言中的结构体访问以及java语言汇总的对象访问有点类

OC 中self. 与 下划线的区别

@property (nonatomic, copy) NSString *name; self.name  是对属性的访问   是在调用一个getter方法   会让引用计数器+1;   _name却不会. _name  是对局部变量的访问   引用计数不会增减 用self.name 是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,_name容易在block中造成循环引用.

iOS @synthesize var = _var 变量前置下划线解释

本文转载至 http://blog.csdn.net/ztp800201/article/details/9231617 前置下划线是一种为了帮助区分实例变量和访问方法的约定.对于编译器来说它只是一种变量重命名而已. 考虑以下代码的区别(不使用ARC的情况下): self.date = [NSDate date]; // 正确,set方法首先释放原来的值 date = [NSDate date]; // 错误,省略set方法将导致内存泄露 _date = [NSDate date]; // 错误

iOS开发-UILabel和UIButton添加下划线

关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选择第一种,第二种有兴趣的可以自己研究一下. UILabel设置下划线: UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 310, 50)]; label.backgroundColor = [UIColor red

ios中safari无痕浏览模式下,localStorage的支持情况

前言 前阶段,测试提了个bug,在苹果手机中无痕模式下,搜索按钮不好使,无法跳页,同时搜索历史也没有展示(用户搜索历史时使用localStorage存储). 正文 iOS上Sarfari在无痕模式下,浏览器假装支持localStorage,并在全局window上暴漏了该方法,所以校验是有localStorage对象的,但是调用setItem进行保存的时候,就报Error: QuotaExceededError ... : The quota has been exceeded. 因此,进行了个小