第 14 周 周报

2017-06-04  本文已影响0人  star_night

@synthesize@property的作用

@property 关键字
是OC中能够快速的定义一个属性的方式,可自动生成 getter 和 setter 方法,是一种编辑器功能(预编译指令)
@synthesize 关键字
表示创建了该属性的访问代码,即可以对属性名称进行修改,同上是一种编辑器功能(预编译指令)

@property(atomic,retain,readwrite) NSString *name; 

在4.4版本以上@property NString *name; 这句话完成了3个功能:

  1. 生成_name成员变量的getset方法的声明;
  2. 生成_name成员变量setget方法的实现;
  3. 生成一个_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;
}
上一篇 下一篇

猜你喜欢

热点阅读