@property和@synthesize
2016-04-17 13:09
302 查看
@property和@synthesize
两个都是编译器指令,编译器指令是用来告诉编译器要做什么.
@property的历史存在两个阶段:
第一个阶段是Xcode4.X之前和之后.
在之前,@property只能生成setter/getter方法的声明:
格式:
@property int age;
会生成setter/getter方法的声明:
-(void)setAge:(int)age; -(int)age;
@synthesize会生成setter/getter方法的实现:
格式:
@synthesize age = _age;
setter方法声明:
-(void)setAge:(in 4000 t)age { _age = age; } ``` //getter方法实现: -(int)age { return _age; }
@property会告诉编译器做什么呢?
1.@property用在声明中告诉编译器声明成员变量的访问器(setter/getter)方法;
2.这样做的好处是我们可以免去手工书写setter方法和getter方法繁琐的代码;
@synthesize的注意点:
@synthesize age = _age;
在setter方法和getter方法的实现中会访问成员变量_age,如果成员变量_age不存在,就会自动生成一个@private的成员变量_age;
@synthesize age;
在setter方法和getter方法实现中会访问@synthesize后面的同名成员变量age,如果age不存在,就会自动生成一个@private的成员变量age;
多个属性可以通过一行@synthesize搞定,中间使用逗号链接:
@synthesize age = _age, number = _number, name =_name;
<————————分————————割—————————线———————>
自从Xcode4.X之后,@property可以同时生成setter和getter的声明和实现;
@property int age;
默认情况下,setter和getter方法中的实现,会访问下划线开头的成员变量(例如:_age), 如果没有就会自动生成一个开头的成员变量,自动生成的成员变量是私有变量,声明在.m中,在其他文件中无法查看,但是可以在本类中查看;@property只会生成简单setter/getter方法,不会进行数据判断;如果需要进行数据判断,我们需要重写getter/setter方法;
1.如果手动重写setter方法,编译器就只会自动生成getter方法;
2.如果手动生成getter方法,编译器就只会自动生成setter方法;
3.如果同时重写setter方法和getter方法,编译器就不会自动生成不存在的成员变量.
注释:在此,如果有@property int age;就不用再写_age这样的成员变量,编译器会自动生成一在.m中的私有成员变量_age.
@property还有一些修饰符: @property int age;//默认的是可读可写; @property (readonly) int age;//只生成setter方法不生成getter方法;(只读) @property (readwrite) int age;//即生成setter方法又生成getter方法;
@property (getter = isGood) BOOL good;//通常BOOL类型的属性的getter方法要以is开头;
如果没有(getter = isGood),调用效果是:
[person good];
现在的调用效果是[person isGood];
[person isGood]
相关文章推荐
- 教你如何解决XCODE升级后插件不能用问题
- 浅谈Xcode 开发工具 XCActionBar
- xcode 4 制作静态库图文详解
- 使用Xcode为iOS应用项目创建PCH文件的方法及应用示例
- 解决 Xcode 6-Beta2 智能提示bug
- 针对iOS开发的一些Xcode使用技巧小结
- Xcode中iOS应用开发的一般项目目录结构和流程简介
- XCode编译速度慢的处理方法
- mac git xcrun error active developer path 错误
- Xcode使用教程详细讲解(全)
- Cocos2d开发1:Xcode与TexturePacker的集成
- windows下objective-c的cocoa框架编程,可以有图形界面哟
- Xcode控制台命令
- 【卡片记忆】快速启动iOS模拟器
- OSX下Xcode更新后,Git提示确认证书
- 解决Xcode symbol not found问题
- Xcode5.0.2 资源更新问题
- Xcode7升级到Xcode8之后遇到文件冲突
- Objective-C(1) 认识一下吧
- Objective-C(13)代码块---block