iOS深浅拷贝

news/2024/7/20 13:24:37 标签: 内存管理

什么是深浅拷贝?

浅拷贝是指针拷贝,深拷贝是对象拷贝。

对一个对象如何实现拷贝

实现NSCopying协议,和NSMutableCopying协议。

- (id)mutableCopyWithZone:(nullable NSZone *)zone;
- (id)copyWithZone:(NSZone *)zone;
复制代码

weak assign copy strong 的区别

  1. weak 用来修饰弱引用的属性。表明该属性定义了一种“非拥有关系”。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似。然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 而assign的“设置方法”只会执行针对“纯量类型” (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。

  2. assign 可以用非 OC 对象,而 weak 必须用于 OC 对象

  3. 使用 copy 的目的是为了让本对象的属性不受外界影响.

  4. strong 用来修饰强引用的属性,只复制对象的指针属于浅拷贝

什么是block

  1. Block 是带有自动变量的匿名函数
  2. 在编程过程中,Block被看成是对象,这个对象封装了一段代码,这段代码可以在任何时候执行。Block可以作为函数参数,或者函数的返回值,而其本身又可以带入参数或者返回值。

__block 说明符将变量的作用域,扩大到Block表达式内。 Static说明符也可以做到这一点。

block的内存管理

Block本身是像对象一样,可以retain和release。但是block在创建的时候,它的内存是分配在栈(stack)上,而不是分配在堆(heap)上。它本身的作用域是属于创建时候的作用域,一旦在创建的作用域外调用block将导致程序崩溃。

copy会把block从栈上拷贝到堆上,这样就可以在其他地方使用这个block了。使用retain无效,只是引用计数增加,还是存在于栈上。在MRC下直接将block放入集合类中是无法在其他地方使用的,需要对block进行copy。ARC下编译器会自动copy。

block用什么修饰?

在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区。在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的。编译器会自动对 block 进行了 copy 操作。

strong-weak dance


http://www.niftyadmin.cn/n/1373378.html

相关文章

程序员书签

来源:http://ncmir.ucsd.edu/~mona/personal/bookmark/programming.html Programming Bookmarks Bridgekeeper C Safe C string library strsafe.h C From the Ground Up: A Guide to C Code Coverage Analysis Terminology Datacube Jungle Design Patterns: Boo…

记阅读promise-polyfill源码探究Promise运行原理

Promise可以看作一个异步操作的占位符,表示一个异步操作的最终状态(完成或失败),以及其返回的值,是目前流行Javascript异步编程解决方案之一。 网上关于Promise用法的文章汗牛充栋,作者在本文也不赘述了。Promise用久了…

文件格式大全

来源:http://myfileformats.com/index.php/sylk/alexa/postscript/pro.html stop spamJuly 29, 2004File formats - Search - Recent additions - List of all formats - Top downloaded formats Members area - Home - Submit format - My formats - Login/Logout …

python入门(十):模块、包

模块:py文件包:目录,目录里面包含__init__.py,内容可以是空里面可以包含多个模块文件,还可以包含子包 1、模块和包,可以很方便的提供给其他程序以复用 1) 利于组织复杂工程 我们写代码的时候,实际上可以把…

USENET服务器列表

http://www.newzbot.com/serverlist.php?sinceALL?able1&orderbygroupcount&sortorderdesc 免费服务器列表: http://freenews.maxbaud.net/newspage.html?sortbyvotes

redis升级注意事项

新版本redis读取 旧版本redis的rdb , aof 使用新版本redis备份rdb , aof操作系统级别备份 rdb , aof重启redis测试 新版本redisrdb , aof 能否读取 if 新版本redisrdb , aof 能读取: 性能测试else: 使用旧版本redis的rdb , aof 回退旧版本redis if 性能测试不过关: 使用旧版本r…

幽默短信列表

http://www.jyday.com/smslist.asp?stype爱情麻辣烫&pfrom编号预览类别人气发送(可填入手机号或会员ID)13256 嗨!收到我的短信没有?还发什么呆,笑一下,好吗?你笑起来很好看。爱情麻辣烫327657 15960 生命不息&a…

总线收发器与电平转换

一,74HC245与74HCT245 245是比较常见的总线收发器,具有转换速度快、驱动能力强且价格便宜等优点,广泛应用于各个设计中。 首先,有几个概念需要搞清楚: 1) 输入高电平(Vih):…