首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

RunLoop总结:RunLoop 与GCD 、Autorelease Pool之间的关系

如果在面试中问到RunLoop相关的知识,很有可能也会问到RunLoop与GCD、Autorelease Pool有没有关系,哪些地方用到了GCD、Autorelease Pool等。...So,本文就总结一下RunLoop与GCD和 Autorelease Pool 之间的关系,看看在RunLoop实现中,哪些地方间接或者直接使用、操作到了GCD 和Autorelease Pool。...RunLoop 与 Autorelease Pool的关系 RunLoop与 Autorelease Pool 有关系么? 有。...AutoreleasePool原理扩展 这一小节,全部摘自黑幕背后的Autorelease,你可以阅读原文,了解更多 Autorelease 内容。...对象,连接链表,后来的autorelease对象在新的page加入 所以,若当前线程中只有一个AutoreleasePoolPage对象,并记录了很多autorelease对象地址时内存如下图: ?

1K51

objective-C 的内存管理之-自动释放池(autorelease pool)

为此obj-c 引用了自动释放池(autorelease pool),每次用xcode创建项目时,可能大家已经注意到了有类似下面的代码模板: int main (int argc, const char...这个池(pool)类似数据结构中的堆栈(Stack),相当于一个容器,每次对象调用autorelease方法时(obj-c中的正式说法应该是:对象发送autorelease消息),对象的引用计数并不真正变化...从结果上看,pool是后进先出的,即:最后autorelease的最先释放(符合stack数据结构的特征)。...再回到前面提到的toString方法中内存泄漏的问题,明白pool的基本原理后,只要把return str换成retrun [str autorelease]就行了,即把该字符串在池中登记,这样当[pool...自动释放池从功能上可以理解为一种延时释放技术:即通过发送autorelease消息,向自动释放池登记,表明自己将来会在pool销毁时,一并发送release消息销毁自己。

989100

Objective-c内存管理学习总结

mutablecopy开头的方法; 2、 非自己生成的对象,自己也能持有,通过retain方法; 3、 不再需要自己持有的对象时,将其释放,用release方法; 4、 非自己持有的对象,无法释放; 2 Autorelease...调用autorelease方法,可使取得的对象存在,但自己不持有。...特别说明:在函数返回值时,调用autorelease方法后,返回值对象的释放机制——在每一次事件触发时(即一个运行循环runloop),系统会自动生成一个autoreleasepool,在事件响应结束时...网友解释:在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才...对于每一个Runloop, 系统会隐式创建一个Autoreleasepool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease

25030

内存管理--34:自动释放池(autoreleasepool)

系统会向其中的对象发送release消息 花括号定义了自动释放池的范围,左花括号开始创建,右花括号处自动释放,在此范围的末尾处,括号内的对象回收到release消息 @ autoreleasepool{ } autorelease...方法会返回对象本身(MRC) Penson *p = [Person new]; p = [p autorelease]; 调用完autorelease 方法后,对象的计数器不变(MRC) Person...*p = [Person new]; p = [p autorelease]; NSLog(@"count= %d",[p retainCount]);//1 autoreleasepool的原理 autorelease...实际上只是release的调用延迟了,对于每一个autorelease,系统只是把该Object放入了当前的autorelease pool中,当pool 被释放时,该pool中的所有Object会被调用...autorelease,才会将对象放入自动释放池(MRC) 在自动释放池创建了对象,一定要调用autorelease,才会将对象放入自动释放池中(MRC) 只要在自动释放池中调用了autorelease

19110

内存管理总结-autoreleasePool

但是在创建person对象的时候一定要调用autorelease方法。...autorelease作用: 1.对象执行autorelease方法时会将对象添加到自动释放池中 2.当自动释放池销毁时自动释放池中所有对象作release操作 3.对象执行autorelease方法后自身引用计数器不会改变...,而且会返回对象本身 4.autorelease实际上只是把对象release的调用延迟了,对于对象的autorelease系统只是把当前对象放入了当前对应的autorelease pool中,当该pool...这个可以说是autorelease的优点,因为无需我们再关注他的引用计数,直接交给系统来做!...可是大家注意到了,str对象没有调用autorelease方法啊,怎么被放到autoreleasepool进行管理的呢?

1.2K60

iOS_自动释放池AutoreleasePool、NSRunLoop、线程Thread 之间的关系

MRC环境,可以通过调用 autorelease 来延迟内存的释放 ARC环境,甚至可以完全不知道 autorelease 也能管理好内存 ARC环境下: 以 alloc / init / new /...mutableCopy 开头的初始化方法:系统会在 调用方法的外围 加上内存管理代码 retain / release,所以其在作用域结束的时候就会被释放 以 其他 开头的初始化方法:系统会在 方法内部 自动加上 autorelease...push哨兵对象 /  autorelease 对象 :都会调用 autorelease Fas t(id obj) 来执行具体的 插入操作 : 当前Page存在且没满:直接添加至next指向位置...个字节内存(也就是虚拟内存一页的大小) 系统会根据保存对象地址数量动态的 增加 和 删除 page 节点 -每个Page除了Page自身的成员变量外,剩下的空间用 begin 和 end 用标识,存放 autorelease...enumerateObjectsUsingBlock内部有autoReleasePool 参考: 黑幕背后的Autorelease(后面的黑魔法看不懂>_<) AutoreleasePool探索学习

79220

iOS内存管理-深入解析自动释放池

AutoreleasePool在子线程上的释放时机 AutoreleasePool需要手动添加的情况 一、Autorelease简介 iOS开发中的Autorelease机制是为了延时释放对象。...对于所有调用过autorelease方法的对象,在废弃NSAutoreleasePool对象时,都将调用release实例方法。...而附有__autoreleasing修饰符的变量替代了autorelease方法,将对象注册到了Autoreleasepool;由于ARC的优化,__autorelease是可以被省略的,所以简化后的ARC...方法 上述是对自动释放池整个生命周期的分析,现在我们来理解延时释放对象autorelease方法的实现,首先查看该方法的调用栈: - [NSObject autorelease] └── id objc_object...,不过push函数入栈的是一个边界对象,而autorelease函数入栈的是一个具体的Autorelease的对象。

5K82

OC知识--彻底理解内存管理(MRC、ARC)

autorelease方法会返回对象本身,且调用完autorelease方法后,对象的计数器不变 Person *p = [Person new]; p = [p autorelease]; NSLog...使用autorelease有什么好处呢 不用再关心对象释放的时间 不用再关心什么时候调用release 2. autorelease的原理实质上是什么?...autorelease实际上只是把对release的调用延迟了,对于每一个autorelease,系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用...alloc] init]; [p run]; } 在自动释放池的外部发送autorelease 不会被加入到自动释放池中 autorelease是一个方法,只有在自动释 放池中调用才有效。...[Person alloc] init] autorelease] autorelease]; } 调用autorelease后又调用release(错误) @autoreleasepool {

4.3K80

iOS内存管理(二)-深入解析自动释放池

AutoreleasePool释放时机 一个是在runloop中隐式创建的autoreleasepool,每个接受autorelease消息的对象,都会在runloop结束时释放。...对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的...Autorelease pool会被销毁,这样这个pool里的每个Object会被release。...,创建一个新的 Page,并将 autorelease 对象添加进去 如果当前 Page 不存在,即还没创建过 Page,创建第一个 Page,并将 autorelease 对象添加进去 pop操作 图片...插入第一个对象 autorelease的嵌套 图片 图片 Autorelease与NSThread、NSRunLoop的关系 RunLoop和NSThread的关系 RunLoop与线程是一一对应关系,

72410

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券