深入的理解属性的修饰符(理论篇)

在ARC有效时,其类型上必须附加所有权修饰符,用来管理属性在内存中的生命周期。 所有权修饰符一共4种,

______strong ______weak ______unsafe_unreationed __autoreleasing

属性声明的属性

所有权修饰符

assign

__unsafe_unreationed 修饰符

copy

__strong 修饰符 (但是赋值得是被复制的对象)

reatin

__strong 修饰符

strong

__strong 修饰符

unsafe_unreatined

__unsafe_unreationed 修饰符

weak

__weak 修饰符

然后在声明成员变量时,如果同属性声明中的属性不一致就是引起编译错误。例如:

** 错误声明,同属性声明中的属性不一致 ** <pre> @property (nonatomic,weak) id obj;</pre>

** 正确声明 ** <pre>@property (nonatomic,weak) id __weak obj; //或者 @property (nonatomic,strong) id obj;</pre>

然后分别详细说明所有权修饰符的使用

__strong

__strong修饰符是 id类型 和 对象类型 的默认所有权修饰符。 <pre> id obj = [[NSObject alloc] init]; 等于 id __strong obj = [[NSObject alloc] init]; </pre>

__weak

因为带有______strong 修饰符的成员变量在持有对象时,很容易发生循环引用,循环引用很容易导致内存泄漏(既应当废弃的对象在超出其生存周期后继续存在)。所以苹果引入了 ______weak修饰符。 1.若附有______weak修饰符的变量所引用的对象被废弃,则将nil赋值给该变量。 2.使用附有____weak修饰符的变量,即是使用组成到autoreleasepool中的对象。 通过上面2特性,使用__weak修饰符可避免循环引用。并且检查附有__weak修饰符的变量是否为nil,可以判断被赋值的对象是否已废弃。

__unsfe_unretained 修饰符

______unsfe_unretained修饰符是不安全的所有权修饰符,并且附有__unsfe_unretained修饰符的变量不属于编译器的内存管理对象。 然后在iOS4 以及 OS X Sonw Leopard 的应用程序中,必须使用__unsfe_unretained修饰符来替代__weak修饰符。并且注意一点是,赋值给附有__unsfe_unretained修饰符变量的对象在通过该变量使用时,必须确保其确实存在,否则将会引起程序崩溃。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深入浅出区块链技术

智能合约语言 Solidity 教程系列5 - 数组介绍

Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么

1063
来自专栏CodingBlock

正则表达式(一)

  正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。找到匹配这些模式的部分就可以对...

18910
来自专栏Python

类和对象的创建过程(元类,__new__,__init__,__call__)

一、 type() 1、创建类的两种方式 方式一 class MyClass(object): def func(self,name): ...

2095
来自专栏区块链入门

【易错概念】Solidity语法的重载,继承的定义

以太坊智能合约语言Solitidy是一种面向对象的语言,本文结合面向对象语言的特性,讲清楚Solitidy语言的多态(Polymorphism)(重写,重载),...

1703
来自专栏彭湖湾的编程世界

【算法】实现栈和队列

栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 ? 可以将其类比于下面文件的取放操作:新到的文件会被先取走...

3356
来自专栏源哥的专栏

调试工具类

import java.io.*; import java.util.*; import java.text.*; import java.lang.refle...

874
来自专栏alexqdjay

angularjs源码笔记(5.1)--parse

2645
来自专栏编程

一篇文章告诉你什么是 Python 元类

. 龟叔发明了 Python,然后集成了一堆概念在这门语言里面,比如:迭代器,装饰器,函数,生成器,类,对象,协程等等。 这些概念对初学者似乎没一个好懂的,不过...

18910
来自专栏数据之美

Python 基础:类与函数

1、Python 中的类(上) 1.1 数据属性 类数据属性和实例数据属性 特殊的类属性 属性隐藏 1.2 方法 实例方法 类方法 ...

2399
来自专栏数据结构与算法

17:字符串判等

17:字符串判等 总时间限制: 1000ms 内存限制: 65536kB描述 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。 ...

3659

扫码关注云+社区