@property就是oc中常用的点语法,用起来十分简单。
应用@property (nonatomic, copy, readwrite, setter=setMyName:) NSString *string
1.点语法究竟是什么
举例说明吧
@property (nonatomic,strong)NSString* string;
上面这一句,等于下面这几句
{NSString* _string; 声明一个成员属性
}
- (NSString *)string 这个成员属性的读(get) 方法和实现
-(void)setString:(NSString *)string 这个成员属性的写(set)方法和实现
这样就很容易的可以看出,这样对于写程序来说省了很多事情
点语法中的(修饰符)
1.原子性atomict/nonatomic
所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到另一个线程。很明显nonatomic,也就是原子性的执行效率高;
2.读写操作readwrite,readonly
3.给set方法和get方法起别名 setter = set的方法名, getter = get的方法名;
4.内存管理相关
assign简单赋值,不更改索引计数
retain释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
copy 建立一个索引计数为1的对象,然后释放旧对象
strong引用计数+1
weak防止循环使用 如代理的时候
很明显这里涉及到了oc的内存管理;
oc的内存管理思路是这样的:(这里想要知道更多的话,要去学习MRC模式,本人水平有限,加之刚接触就用上了ARC,使用MRC模式要加-fno-objc-arc ,哎,都是惰性啊,不过思路是知道的)
就像是一个办公室的开灯问题;
1.第一个办公室的人打开灯->引用计数器+1 开灯即开拓内存空间
2.第二个第三个人来办公室,->引用计数器+1 灯已经打开,不必打开了。 即不必开拓内存,直接指向原内存空间就好
3.灯开的时候,有人离去; ->引用计数器-1,最后一个人关灯,关灯即释放,
最后写一个懒加载的例子来加深一下点语法的理解
懒加载:当使用到的时候才取创建,这样可以节省内存空间
假如你有兴趣打下面这些代码。你会发现,_array 和 self.array 在我的这一段代码中是不能更换的,不报错,但是程序跑起来你会发现的。
@property (nonatomic,strong)NSMutableArray *array;
-(NSMutableArray *)array{
if (!_array) {
_array = [[NSMutableArray alloc]init];
// _array 去取保存的数据
}
return _array;
}
UITableView的代理方法中
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.array.count;
}