property属性

属性变量可以理解为成员变量加上几个方法

@property属性实现了三步
例如:@property(nonatomic,strong) int age;
1.提供了一个成员变量_age(在属性变量名前加了下划线)
2.提供了set(setAge) get(age)方法的声明(无get 防止与之后的某个关键词混淆) 注意大小写
3.提供了 set get 方法的实现

property关键字:
线程是否安全:
1.nonatomic:线程不安全的 没有加锁解锁机制 效率高
2.atomic: 线程安全 有加锁解锁机制 效率低
内存管理-引用计数 retainCount
只要是oc的对象类型 就用strong或者retain
字符串对象使用copy
3.strong:声明对一个不是自己创建(系统创建的)的对象的拥有权 retaincount+1
4.weak:不声明对一个不是自己创建的对象的拥有权(弱引用)
5.retain:(老版本中 现同strong)
6.copy:拷贝一个已经创建的对象 对其拥有拥有权 retaincount=1

7.assign:修饰c语言的基本数据类型 int float bool NSlnteger
对方法的管理:
8.setter= 修改set方法的方法名 setter = setMybrand: 有参数要加冒号

9.getter=修改get方法的方法名 getter = getBrand

10.readwrite:提供了set get方法 可读可写

11.readonly: 提供了get方法 只可读
例如:@property(nonatomic,strong,readonly)NSArray *array;

某些情况下要重写set get方法 (注意事项):
重写set方法 注意不要使用self.来为这个属性赋值(等价于调用set方法 )死循环—— 对数据需要做改变时 希望第一时间知道数据来了(即要赋值时也即调用set方法时)

重写get方法 不要使用self.来访问(等价于调用get方法)这个属性的值 也是死循环——懒加载 :对于某种东西当要使用时(即它访问该对象时也即调用get方法时)再下载而不是程序一运行就下载所有

 

 

假设在某个类当中定义了name这个属性变量 

则在该类的实现文件中 可以有以下三种引用方法:

-(void)getup{
    //NSLog(@"%@起床了",_name);//下划线只有在类本身中使用 所以这里没有_brand _flavor 该方法易出现内存错
    
    NSLog(@"%@起床了",self.name);
   // NSLog(@"%@起床了",[self name]);
}

对于self的认识:

self的理解:凡是调用当前这个类里面的方法或者属性变量 就要用self
self代表谁(某个类或者某个对象) 就看谁在调用这个方法

 

posted @ 2019-02-17 18:09  kinghyt  阅读(519)  评论(0编辑  收藏  举报