- 本周学习的内容
- 继承
- 多态
- 协议
- 本周分享的知识点
- @property 与 @synthesize
- 问题
- 暂无
- 下周计划
- 学习Foundation框架
@synthesize
和@property
的作用
@property 关键字
是OC中能够快速的定义一个属性的方式,可自动生成 getter 和 setter 方法,是一种编辑器功能(预编译指令)
@synthesize 关键字
表示创建了该属性的访问代码,即可以对属性名称进行修改,同上是一种编辑器功能(预编译指令)
@property(atomic,retain,readwrite) NSString *name;
在4.4版本以上
@property NString *name;
这句话完成了3个功能:
- 生成
_name
成员变量的get
和set
方法的声明; - 生成
_name
成员变量set
和get
方法的实现; - 生成一个
_name
的成员变量。
注意:这种方式生成的成员变量是private
的。
参数
1、第一个位置的值:
atomic:线程保护的,默认
nonatomic:线程不保护的
2、第二个位置的值:
assign:直接赋值,默认
retain:保留对象,内部会自动调用retain方法,引用计数+1
copy:拷贝对象
3、第三个位置的值:
readwrite:生成get/set方法,默认
readonly:只生成get方法
代码实例
#import <Foundation/Foundation.h>
@interface pro : NSObject
{
NSString *_name;
}
@property NSString *name;
//等价于下面的代码
//- (void) setName:(NSString *)name;
//- (NSString *)name;
@end
@implementation pro
//在Xcode 4.4 版本以上可省略 @synthesize
@synthesize name = _name;
//等价于下面的代码
//- (void) setName:(NSString *)name
//{
// _name = name;
//}
//- (NSString *) name
//{
// return _name;
//}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
pro *f = [[pro alloc] init];
//方法1
[f setName:@"Hello world!"];
NSLog(@"%@", [f name]);
//方法2
f.name = @"Bye bye!";
NSLog(@"%@", f.name);
}
return 0;
}
网友评论