ios属性讲解(property和synthesize区别)
来源:互联网 发布:机械加工工艺编制软件 编辑:程序博客网 时间:2024/06/05 09:27
- 属性的改变步骤
- property和synthesize的区别
刚刚接触ios,后来学习别人代码的时候,发现定义属性有时候会写在m文件@inferface和end之间或者有时候还会涉及到@synthesize。后来才发现原来是随着ios的版本不断增加,属性的写法也多多少少有些区别.
目前属性的声明:
@property (nonatomic,strong) NSString *myTitle;
当我们声明一个属性的时候,编译器会为我们自动生成对应的实例变量_myTitle,当然,我们也可以在.m文件通过关键字synthesize手动生成对应的实例变量myTitle。这样引用的时候就可以不用加下划线了
首先我们要知道属性是OC的一种新的语言机制,声明的属性必须有对应的实例变量
一、属性的改变步骤:
在苹果使用LLVM编译器之前,属性的使用方式是:手动声明实例变量,代码如下:
.h文件:
@interface ViewController : UIViewController{// 属性的实例变量 NSString *mytitle;}@property(copy,nonatomic) NSString *myTitile;@end
对应的.m文件
//编译器遇到@synthesize会自动实现setter和getter方法//编译器遇到@synthesiz会去访问同名的myTitle,如果没有找到就会报错。@synthesize myTitle
而苹果开始使用LLVM编译器后,编译器就可以自动为属性生成一个带下划线名字的实例变量
属性改变步骤
第一版:
.h文件:@interface ViewController : UIViewController{// 属性的实例变量 NSString *mytitle;}@property(copy,nonatomic) NSString *myTitile;@end
对应的.m文件
//编译器遇到@synthesize会自动实现setter和getter方法//编译器遇到@synthesiz会去访问同名的myTitle,如果没有找到就会报错。@synthesize myTitle
第二版
不需要自己手动声明一个成员变量,关键字@synthesize会默认去访问myTitle的同名变量,如果找不到则会自动生成一个
.h文件
@property (nonatomic,strong) NSString *myTitle;
.m文件
//编译器遇到@synthesize会自动实现setter和getter方法,访问同名变量myTitle。如果找不到的话会自动创建一个私有同名变量myTitle,因此之后可以不用手动声明一个实例变量@synthesize myTitle;
第三版
考虑到变量名和getter的方法名、setter的参数名一样,引起警告,所以默认给属性生成的同名变量带下划线
.m文件
//指定_myTitle作为myTitle的实例变量@synthesize myTitle = _myTitle;
第四版
随着ios升级,@synthesize也可以省略了,只用在.h文件中声明属性即可
@property (nonatomic,strong) NSString * myTitle;
总结:声明属性的时候编译器自动生成的实例变量,实例变量的本质是成员变量,self.myTitle操作属性的时候实质上是在操作成员变量_myTitle(也就是实例变量)
二、property和synthesize的区别
synthesize的作用:
1、让编译器自动生成setter和getter方法
2、指定与属性对应的实例变量:如果在.m文件写了@synthesize xxx,那么生成的实例变量就是xxx;如果没有写的话则就是_xxx。
在之前的版本中‘,@property只能写在.h文件中,而@synthesize只能写在.m文件中。而现在@property就独揽了@property和@synthesize的功能。
@property(nonatomic,strong) NSString * xxx 这句话实现了3个功能:
1)生成_str成员变量的get和set方法
2)生成_str成员变量set和get方法的实现
3)生成一个_str的成员变量(私有的)
总结:声明属性的时候编译器自动生成的实例变量,实例变量的本质是成员变量,self.myTitle操作属性的时候实质上是在操作成员变量_myTitle(也就是实例变量)
阅读全文
0 0
- ios属性讲解(property和synthesize区别)
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- ios的@property属性和@synthesize属性
- iOS开发 属性(property)和合成(synthesize)
- iOS开发中属性 property 和 synthesize
- iOS@synthesize 和 @property
- iOS开发中属性 property 和 synthesize 权威的介绍
- iOS开发中属性 property 和 synthesize 权威的介绍
- iOS中关于属性@property和@synthesize的问题:
- ios之@property和@synthesize
- [IOS基础]property和synthesize
- ios中的@property和@synthesize
- 用两个栈来实现一个队列
- Google网页样式标注Chrome扩展Visual-inspector
- 设计模式定义
- Oracle之行转列,列转行大全
- odoo8.0(OpenERP)一些小知识
- ios属性讲解(property和synthesize区别)
- (练习)I/O文件流处理
- JEESZ-Redis分布式缓存安装和使用
- openstack shaker-image的build
- 三款摄像头设备URL总结
- Intent 能传递的数据类型
- 445. Add Two Numbers II
- 贝叶斯分类
- Java小程序之随机最大值最小值