@property 详解2

@property 详解1讲解了@property内部做了的3件事以及它的两个属性的作用。

下面我们讲解一下修饰词有些地方也叫属性特质。我们创建一个SMPerson类,再用@property给它声明一个name属性.

@property 详解2_第1张图片
图1:声明一个SMPerson类,给它声明一个name属性

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

@property 详解2_第2张图片
图2:这个效果和上面的效果一样

具体分解我们下面会写,此时我们应该知道使用属性时,@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页来源于<>


@property 详解2_第3张图片
图3

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

你可能感兴趣的:(@property 详解2)