<!--StartFragment-->一般通过函数返回值返回的对象都是autorelease对象(包括直接通过返回值返回的和通过指针的指针返回的),MRC下需要自己retain这个对象。autorelease的对象会在当前autoreleasepool进行drain操作的时候被发送release消 ...
分类:
其他好文 时间:
2020-01-08 00:40:23
阅读次数:
84
问题: MRC中通过调用静态方法创建的新对象,不再使用时需要对其发送release消息吗? 不需要,因为约定静态方法创建的对象会自动将其放入自动释放池,即已对其发送autorelease消息,因此不可再对其进行手动释放。MRC中静态方法创建新对象的实现模板如下: 问题: NSRangeExcepti ...
分类:
移动开发 时间:
2019-03-20 21:00:23
阅读次数:
229
1: 掌握cc.loader加载本地资源; 2: 掌握cc.loader加载远程资源; 3: 掌握资源释放的机制与autorelease; 4: 掌握手动释放资源; cc.Loader 1:有三个默认的Pipeline: (1) assetLoader: 主要用于加载资源, 加载asset类型资源, ...
分类:
其他好文 时间:
2019-02-28 01:21:59
阅读次数:
786
本文主要探讨两个方面:(1)autorelease对象到底是合适被析构的?(2)OC内部是如何处理一个被autorelease掉的对象的? (1)autorelease对象到底是何时被析构的? 这个问题说难不难,但说简单也不简单。我们还是先看一类熟悉的不能再熟悉的代码吧: 1 - (void)vie ...
分类:
其他好文 时间:
2019-01-17 20:01:41
阅读次数:
177
1.#import 防止重复引用 <系统文件> "用户自定义文件"。 2.@autoreleasepool。 {}内的会自动回收内存,无需手动释放。 过程约等于: a)创建autorelease poll。b)对象放入,类似于入栈。 c)一次消息循环结束时,runloop结束时,清理这个栈。 3.@ ...
分类:
移动开发 时间:
2018-07-26 18:21:57
阅读次数:
184
Node * Node::create() { Node * ret = new (std::nothrow) Node(); if (ret && ret->init()) { ret->autorelease(); } else { CC_SAFE_DELETE(ret); } return r ...
分类:
其他好文 时间:
2018-07-03 18:19:57
阅读次数:
150
iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存。本文主要讲讲Autorelease,Core Foundation对象在内存管理方面要注意的地方。 Autorelease 提到内存管理,就不得不提autorelease,虽然我们平 ...
分类:
移动开发 时间:
2018-03-29 19:17:41
阅读次数:
232
几个关键方法: AutoreleasePool类中的clear方法,在每一帧的最后,会将_managedObjectArray中的autorelease对象移除,同时对每个对象执行一边release方法。 Ref类的release方法中,对引用计数减1,如果引用计数等于0,则释放这个对象。 Auto ...
分类:
其他好文 时间:
2018-03-29 02:14:57
阅读次数:
141
黑幕背后的Autorelease http://www.cnblogs.com/feng9exe/p/7239552.html objc_autoreleasePoolPush的返回值正是这个哨兵对象的地址,被objc_autoreleasePoolPop(哨兵对象)作为入参,于是: 假设这些都有线 ...
分类:
其他好文 时间:
2018-01-23 20:23:37
阅读次数:
141
iOS自己创建的线程需要自己定时的创建autorelease pools,否则对象不能及时自动释放。 方法1是不对的,while中的对象会无法及时释放。 https://developer.apple.com/documentation/foundation/nsautoreleasepool ...
分类:
移动开发 时间:
2017-09-01 21:22:15
阅读次数:
180