美文网首页将来跳槽用
@property的所有修饰词

@property的所有修饰词

作者: 帥陽 | 来源:发表于2017-02-08 15:22 被阅读120次

线性安全的:nonatomic,atomic

访问权限的:readonly,readwrite

内存管理(ARC):strong,assign,weak,copy

内存管理(MRC):assign,retain,copy

指定方法名称:setter= ,getter=

weak与assign用法的不同:

1>在ARC中,出现循环引用的时候,必须要用一端使用weak,比如:自定义View的代理属性

2>已经自身对它强引用一次,没有必要再强引用一次,此时使用weak,自定义View的子控件属性一般使用weak,但是也可以使用strong

3>weak当对象销毁的时候,指针会被自动设置为nil,而assign不会,assign可以用非OC对象,而weak必须用于OC对象

4>在ARC环境下,无论是強指针还是弱指针都不需要在dealloc设置为nil,ARC会自动帮我们处理

copy的使用:

1>对于字符串和block的属性一般使用copy

2>字符串使用copy是为了外部把字符串内容改了,影响该属性

3>block使用copy是在MRC遗留下来的,在MRC,方法内部的block是在栈区的,使用copy可以把它放到堆区.在ARC中对于block使用copy还是strong效果是一样的

4>@property(nonatomic,copy)NSMutableArray*mutableArray; 使用copy修饰可变是数组时,调用了数组的添加,删除,修改的方法时,程序会因为找不到对应的方法而崩溃,因为copy就是复制一个不可变的NSArray的对象

5>想要的自己的类也支持copy的功能需要以下两个操纵:1/遵守NSCopying协议,2/实现-(id)copyWithZone:(NSZone*)zone;方法.属性中使用copy的是字符串和block.

6>在重写带copy关键字的setter时候,一定要调用一下传入的对象的copy方法,然后在赋值给该setter的方法对应的成员变量

@protocol和category中使用@property:

1>在protocol中使用property只会生成setter和getter方法是声明,我们使用属性的目的是希望遵守我协议的对象实现该属性

2>在category使用@property也是只会生成setter和getter方法的声明,如果我们真的需要给category增加属性的实现,需要借助于运行时的两个函数:1.objc_setAssociatedObject2.objc_getAssociatedObject

@synthesize和@dynamic分别的有什么作用:

1>@synthesize和@dynamic是@property两个对应的词,用来修饰属性变量的,如果@synthesize和@dynamic都没有写,默认的就是@synthesizevar = _var

2>@synthesize的语义是你没有手动实现setter和getter方法,那么编译器会自动为你加上这两个方法

3>@dynamic告诉编译器,属性的setter和getter方法用用户自己实现,不自动生成,(注意:对于readonly的属性只需要提供getter方法即可).假如一个属性被声明为@dynamicvar ,然后你没有提供setter和getter方法,在编译的时候没有问题,但是当程序运行到instance.var=someVar,由于缺少了setter方法会导致程序崩溃;或者当运行到someVar=var时.由于缺少getter方法同样会导致崩溃.也就是在编译的时候没有问题,但是在运行的时候才会执行相应的方法,这就是动态绑定.

[immutableObject copy] // 浅复制

[immutableObject mutableCopy] //深复制

[mutableObject copy] //深复制

[mutableObject mutableCopy] //深复制

copy:浅拷贝,会创建新的内存空间,并将旧的数据的地址值指向新的内存空间,当新的数据修改时候旧的也会修改,但是当新增对象的时候只会添加某一个对象。

Mutable Copy:深拷贝,会创建两个完全独立的内存空间,数据值一样。

相关文章

  • @property的所有修饰词

    线性安全的:nonatomic,atomic 访问权限的:readonly,readwrite 内存管理(ARC)...

  • atomic

    atomic是property的修饰词,原子属性,@property (atomic) int age;编译器会自...

  • iOS 属性修饰词

    一、 property有哪些属性修饰词? 写在后面:Q:ARC下property的默认关键字是?A:@proper...

  • 基本语法备忘

    修饰词 property & synthesize https://www.jianshu.com/p/e27fe...

  • OC 属性修饰词retain assign等

    #修饰词retain、assign ***retain、assign、copy在@property中的使用实际上是...

  • @property 属性修饰词

    修饰词:assign、weak、strong、retain、copy、nonatomic、atomic、reado...

  • property的使用策略

    Property常用的属性 常用场景 属性中的修饰词 : assign ( ARC/MRC )1:assign用于...

  • 3. iOS面试题

    retain 和 copy 的区别 -- iOS学习-属性@property的修饰词 retain:创建一个指针,...

  • @property 详解2

    @property 详解1讲解了@property内部做了的3件事以及它的两个属性的作用。 下面我们讲解一下修饰词...

  • iOS property默认修饰词

    关于ARC下,不显示指定属性关键字时,默认关键字:1.基本数据类型:atomic readwrite assign...

网友评论

    本文标题:@property的所有修饰词

    本文链接:https://www.haomeiwen.com/subject/gxavittx.html