autorelease对象的释放由autoreleasepool管理,每个线程的每次runloop迭代里都会有一个autoreleasepool,当每次迭代结束后会从当前栈顶到上一个标记位内的autorelease对象做一次release操作,需要释放的对象引用计数-1, 达到释放条件就会释放, 如果引用计数不为0那么就发生了内存泄漏, 因为已经失去了管理权限.
runloop的迭代周期和方法执行的生命周期无对应关系,所以方法体内的autorelease对象没有确定的释放时机,至于如何保证autorelease对象短时间可用,暂不可知。
局部变量的释放时机为方法体结束后。
页面全局变量的释放时机由当前页面的生命周期管理,页面需要释放时会对vc做release操作,vc释放后其上层页面及属性也会释放,当属性为block发生循环引用时,block等待vc释放后才能释放,vc等待block释放才能释放。
runtime动态添加的类属性存放在全局区,和类有一定的绑定关系,释放时机不清楚。