OC @property

388 阅读2分钟

@property

@property int age;

  • 自从Xcode 4.x后,@property可以同时生成setter和getter的声明和实现

  • 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量 如果没有会自动生成一个_开头的成员变量,自动生成的成员变量是私有变量, 声明在.m中,在其它文件中无法查看,只可以在本类中查看

  • 如果需要对数据进行判断需要我们之间重写getter/setter方法

    • 若手动实现了setter方法,编译器就只会自动生成getter方法
    • 若手动实现了getter方法,编译器就只会自动生成setter方法
    • 若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量

@property修饰符

readonly&readwrite

@property(属性修饰符) 数据类型 变量名称;

  • readonly 只生成setter方法,不生成getter方法 readwrite 既生成getter 又生成setter方法(默认)

getter&setter

  • 指定所生成的方法的方法名称
    • getter=你定制的getter方法名称
    • setter=你定义的setter方法名称(注意setter方法必须要有 :)
@property (getter=isMarried)  BOOL  married;
说明,通常BOOL类型的属性的getter方法要以is开头,使用时可以用isMarried也可以用married

retain(MRC)&assign(MRC&ARC)

  • retain : release旧值,retain新值(用于OC对象) 会自动帮我们生成getter/setter方法内存管理的代码

retain : 除NSString\block以外的OC对象

  • assign : 直接赋值,不做任何内存管理(默认,用于非OC对象类型) 不会帮我们生成set方法内存管理的代码, 仅仅只会生成普通的getter/setter方法, 默认什么都不写就是assign

assign :基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端用assign

  • __strong Person *p = [[Person alloc] init]; __weak Person *p2 = p;

strong&weak(ARC)

  • strong : 用于OC对象, 相当于MRC中的retain strong : 除NSString\block以外的OC对象
  • weak(弱指针) : 用于OC对象, 相当于MRC中的assign

delegate用weak

self.person.delegate =  self;

//vc-->person-->delegate-->self(vc)

weak : 当2个对象相互引用,一端用strong,一端用weak

  • weak: 代码写控件(有添加addSubView),连线添加的控件属性

  • assign : 用于基本数据类型、枚举、结构体, 跟MRC中的assign一样

copy(ARC&MRC)

  • copy : 只用于NSString,NSArray,NSDictionary,block

atomic&nonatomic

  • atomic :性能低(默认)
  • nonatomic :性能高(在iOS开发中99.99%都是写nonatomic)