ARC\MRC下property关键字的用法

使用属性关键字前,需要先理解属性关键字的作用。其实《简单来说...》就是指导底层如何生成set、get方法的,如果不自己定义set、get方法,系统将会自动为你生成,但如何生成依据的就是这些属性关键字,不同的属性关键字的组合将决定set、get方法的具体实现,实现不同,功能自然也就不同了...

----------------------------------------------------------------------------------------------------------------------------------------

ARC:

1、assign:基本数据类型、枚举、结构体等非OC对象类型。

2、strong/retain:使用必须满足两个条件,一是必须是OC对象类型,二是需要被强引用不能‘随便‘释放。

3、weak:

1)别人创建别人拥有,你只是借用一下而已,随时可能会不见,但不见的时候你可以发现。

2)使用时必须满足两个条件,一是必须是OC对象类型,二是自己不直接拥有的对象。比如delegate,parentviewcontroller等,以防止循环引用。

3)weak有一个大招,就是当所指对象被释放的时候会自动置为nil。实现的原理《简单来说...》就是每一个strong维护一个weaktable,当把一个strong对象赋值给weak对象时,weaktable中就记录该weak对象,当strong释放时就把weaktable中所有的对象取出来挨个置为nil。

4、copy:用于block。用于NSString、NSDictionary、NSArray等有Mutable类型的类,此处可以理解为(copy=不可变)。经过测试后发现当把NSString对象赋给copy类型的NSString时,地址未发生改变相当于浅拷贝和strong效果一样,但把NSMutableString赋给copy类型的NSString时地址发生改变,此处相当于深拷贝。

5、readonly/readwrite:只读/可读写.

6、atomic/nonatomic:原子操作/非原子,《简单来说...》就是是否线程安全,但通过此方法来保证线程安全开销是很大滴,如果条件允许还是在适合的地方加锁靠谱。

7、getter/setter:以上都无所谓了,自己写set、get方法。

----------------------------------------------------------------------------------------------------------------------------------------

MRC:

1、assign:基本数据类型、枚举、结构体等非OC对象类型。也可用于delegate\parentviewcontroller等不直接拥有的对象,作为MRC下weak的替代品。

2、retain:使用必须满足两个条件,一是必须是OC对象类型,二是需要被强引用不能‘随便‘释放。

3、unsafe_unretained:

1)别人创建别人拥有,你只是借用一下而已,随时可能会不见,并且不见的时候连个招呼都不打。与ARC中weak的区别就是不会自动置为nil。

2)使用时必须满足两个条件,一是必须是OC对象类型,二是自己不直接拥有的对象。

3)与assign的唯一区别就是不能用于基本数据类型。

4、copy:用于block。用于NSString、NSDictionary、NSArray等有Mutable类型的类,此处可以理解为(copy=不可变)。经过测试后发现当把NSString对象赋给copy类型的NSString时,地址未发生改变相当于浅拷贝和strong效果一样,但把NSMutableString赋给copy类型的NSString时地址发生改变,此处便想当于深拷贝了。

5、readonly/readwrite:只读/可读写.

6、atomic/nonatomic:原子操作/非原子,《简单来说...》就是是否多线程安全,但通过此方法来保证多线程安全开销是很大滴,如果条件允许还是在适合的地方加锁靠谱。

7、getter/setter:以上都无所谓了,自己写set、get方法。

时间: 2024-10-15 18:30:43

ARC\MRC下property关键字的用法的相关文章

iOS: ARC & MRC下string内存管理策略探究

ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作没我们想的那么简单,下面就让我们一起看看NSString和NSMutableString在MRC下执行retain,copy,mutableCopy,以及ARC下不同的修饰__weak, __strong修饰赋值究竟发生了什么. 一.验证代码如下: - (void)testStringAddress { i

Java下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

ava下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

大钟的ios开发之旅(2)————简单说说ios中ARC与非ARC模式下的property的变量修饰词

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

@autoreleasepool在ARC和MRC下的区别

MRC这个词应该是我编的,ARC,Automatic Reference Counting,手工引用计数就应该是:Manual Reference Counting,那就应该是MRC喽,不过没有见人这样用过. ARC引入了新的语句管理自动释放池语法: @autoreleasepool {     // Code, such as a loop that creates a large number of temporary objects.} 测试了一下,在ARC情况下和MRC情况下对象的释放有

iOS内存管理(ARC,MRC)

iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理的问题: 1.内存泄露:不再需要的对象没有释放. 2.野指针:正在使用的对象提前释放. 引用计数: 1.每一个对象上都有一个引用计数器 2.当对象出生时引用计数器为1 3.当对象调用retain方法时引用计数器+1 4.当对象调用release方法时引用计数器-1 5.当一个对象引用计数为0时,这个

魏兆辉的IOS基础学习笔记之十 OC语言基础-05 @property关键字

在上一篇笔记中是学习了怎样手动编写getter和setter方法,相对来说复杂一些,今天学习了@property关键字就可以自动的生成这两个方法,十分方便, 另外在内存管理中,也可以使用这个关键字,省去了重写dealloc函数的麻烦,只需要写进去关键词就可以. 让系统自动合并setter和getter只要两个步骤: (1). 在类接口部分使用@property指令定义属性. (2). 在类实现的部分使用synthesize指令声明该属性即可. 所有,上面例子中定义Engine的存取方法我们可以修

@property关键字的使用

1.作用:@property是用来快速生成属性和属性的getter,setter方法的 2.用法1.当类有声明属性时,可以用@property 生成属性的get,set方法 @interface Student { int age; } @end //该句就相当于原始的get,set方法 @property int age; 此时类的实现中实现get,set方法就得使用@syhthesize关键字 @implementation Studen //代表了getset 方法的实现, @syhthe

黑马程序员---OC基础5【点语法】【@property关键字】【@synthesize关键字】【id类型】【动态类型】【构造方法】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [点语法] 1 1.使用“点语法” 2 Student *stu= [[Student alloc]init]; 3         //调用set方法 4         [stu setAge:20]; 5         [stu setName:@"Jone"]; 6         //点语法:xcode的特性,Xcode帮我们做了代码替换 7         //点语法,