最近在夯实基础,复习了 autorelease 内容,根据 autorelease 特性及注意点,自己总结了一部分面试小知识点,希望可以帮助大家,欢迎指正和补充,共同进步
autorelease 面试题小结什么是 autorelease?
一种支持自动引用计数的内存管理方式,只要给对象发送 autorelease 消息,就会将对象放入自动释放池(@autoreleasepool)中,当自动释放池被销毁时,会对池中所有对象做一次 release 操作
1,向对象发送 autorelease 消息后会改变对象的引用计数吗?
答:不会
解释:autorelease 的本质是将release消息延迟,只有在release消息触发完成后,引用计数才会-1
2,向对象发送 autorelease 消息返回什么?
答:对象本身
eg:
Person *p = [[Person alloc] init];
p = [p autorelease];
3,自动释放池释放时,会销毁所有池中的对象吗?
答:不会
原因:
对象只有在retain-count 为0时才会被释放,如果自动释放池中的对象还有强指针指向该对象,则不会被释放
4,一个程序运行的过程中只能产生一个自动释放池吗?
答:可以有多个自动释放池
解释:
在程序运行过程中会创建多个自动释放池,以栈的形式存在(先进后出),发送 autorelease 消息时,会将这个对象放到栈顶的释放池中
5,Foundation 框架中用类工厂方法创建的对象,都适合 autorelease 的吗?
答:是的
网友评论