第六条 理解属性
在平时的开发中会定义一些属性,通常是@property去定义.在书中的第六条中详细的讲解了属性的这一概念,
通常我们定义好了属性就可以直接_去使用,另外有一点什么时候用_和self去使用属性这在第七条中会说明.
然后器是当我们写好了一个属性之后,事实上是OC已经帮我们把"存取方法","获取方法"已经写好了.
在详细的说一下OC区别去Java和C++的不同之处,就是属性.当然我们也可以自己去写getter和setter方法,
这样做的话存在内存的问题,说的简单点就是单一个变量定义的时候,已经给他分配好内存的地址空间了,然后在他前面有添加了一个新的变量,这时候原来的变量的内存空间就变成了新变量所在的地址,那么修改类定义之后就必须从新编译,不然就会出错,大概就是这个意思.当然每种语言都会有处理方法,OC是利用runtime机制,用类对象那个在运行时去查找,随着类的定义而改变.解决了这个问题.还有一种解决方法就是通过存取方法来做.这就是内部封装的属性.
接下来介绍一下@synthesize和@dynamic
做过iOS开发的对于这两个关键字应该不陌生,通过@property去定义的属性,器名称前面会有一个_作为名字,通过@synthesize去修改名字.而@dynamic是告诉编译器不要自动生成器存取方法和实例变量.
属性的特性
原子性:natomic,也叫同步锁.在iOS开发中一般使用nonatomic,因为同步锁造成的形内问题比较大,
读写权限:readwrite:自动生成getter和setter方法,用关键字@synthesize去修饰,readonly仅仅拥有获取方法.
assign.strong,weak,copy,unsafe_unretained这么多特性.这些用法我就不多说了.
网友评论