@property 详解1讲解了@property内部做了的3件事以及它的两个属性的作用。
下面我们讲解一下修饰词有些地方也叫属性特质。我们创建一个SMPerson类,再用@property给它声明一个name属性.

注意这里我们没有用修饰词,其实,内部@property是给了它修饰词的,具体如下:

具体分解我们下面会写,此时我们应该知道使用属性时,@property内部会为name 编写编译器对其产生的存取方法的特性。
属性可以拥有以下特性:
原子性:
atomic: 原子性,默认情况下是加同步锁的,保证数据一致性,但是这样的坏处就是消耗的资源较多,运行较缓慢
nonatomic: 非原子性,线程不安全,运行速度快。
你会发现,所有属性都声明为nonatomic。这样做是有历史原因的,在iOS开发中,同步锁使用开发较大,会带来性能问题,但是这样做在Mac OS X开发中就不会出现瓶颈,简单的理解就是,iphone 现在最好的A10处理器也才2G,而mac电脑现在至少都8G内存,当然这还有另外的处理器品牌特性等问题。
内存管理修饰词
其中我们知道@property会给我们自动生成setter和getter方法,熟悉MRC的人就知道,不同的修饰词在release和retain的时候,所产生的setter和getter方法出来的形式是不一样的,这里建议虽然现在我们极少运用MRC来编写代码,但是为来更好的理解ARC还是有必要熟悉一下MRC。下文知针对ARC环境下编写,MRC略有不同不详尽概述
assign: 用来修饰基本数据类型或者说非OC对象
strong: 用来修饰OC对象
copy: 一般我们用到的是用来修饰NSString类型和block类型
weak: 当我们防治循环引用的时候运用。
注意: assign strong copy weak不会只有这里说的那么简单,这里只是说一个大概,每一个的用法都多种多样,尤其是copy和weak的内部实现,MRC中assign 和retain等,都是值得我们琢磨很久。 具体大家想了解可以参照<招聘一个靠谱的iOS>这里说的看一下
方法名:
请原谅我偷懒.图片26页来源于<<Effective Objective - C 2.0>>

要点:
+ iOS开发过程中,用@property做属性申明的时候我们一律用nonatomic,不要用atomic或者不写
网友评论