内存管理的几条原则是什么?按照默认法则,哪些关键字生成的对象需要手动释放?哪些情况下不需要手动释放,会直接进入自动释放池?
(1) OC使用了“引用计数”的内存管理机制
(2)当使用new、alloc或copy方法创建一个对象时,该对象引用计数器为1。如果不需要使用该对象,可以向其发送release或autorelease消息,在其使用完毕时被销毁。
(3)当对象调用retain方法时,引用计数值加1;调用release方法时,引用计数值减1;调用autorelease方法时,引用计数值不会立即减1,会
将对象放入自动释放池,当程序退出时,自动释放池会将其中的所有对象的计数值都减1; 如果retain了某个对象,需要release或
autorelease该对象,保持retain方法和release方法使用次数相等
(4)当引用计数值为0时,系统自动调用dealloc方法,将对象内存销毁
(5)使用new、alloc、copy关键字生成的对象和retain了的对象需要手动释放,即调用release方法。设置为autorelease的对象不需要手动释
放,会直接进入自动释放池。
(6)使用类方法创建的对象,一般会默认放入自动释放池,不需要手动调用release方法去释放其内存,如NSArray *arr = [NSArray
arrayWithObjects:@“china”,@“beijing”]; 此时arr不需要调用release方法,不然可能会出现内存释放再去调用的崩溃错误!
(1) OC使用了“引用计数”的内存管理机制
(2)当使用new、alloc或copy方法创建一个对象时,该对象引用计数器为1。如果不需要使用该对象,可以向其发送release或autorelease消息,在其使用完毕时被销毁。
(3)当对象调用retain方法时,引用计数值加1;调用release方法时,引用计数值减1;调用autorelease方法时,引用计数值不会立即减1,会
将对象放入自动释放池,当程序退出时,自动释放池会将其中的所有对象的计数值都减1; 如果retain了某个对象,需要release或
autorelease该对象,保持retain方法和release方法使用次数相等
(4)当引用计数值为0时,系统自动调用dealloc方法,将对象内存销毁
(5)使用new、alloc、copy关键字生成的对象和retain了的对象需要手动释放,即调用release方法。设置为autorelease的对象不需要手动释
放,会直接进入自动释放池。
(6)使用类方法创建的对象,一般会默认放入自动释放池,不需要手动调用release方法去释放其内存,如NSArray *arr = [NSArray
arrayWithObjects:@“china”,@“beijing”]; 此时arr不需要调用release方法,不然可能会出现内存释放再去调用的崩溃错误!