手动管理:MRC(manual reference counting)(人工应用计数).
.anto自管理.
alloc开辟空间
dealloc是回收空间
release释放自己空间也就是释放自己拥有的所有全.
内存分配存在在的三大问题:1.野指针.2.过度释放.3.内存泄漏
光灯原理:开辟一个空间即计数器自动+1,
遛狗原理:
房产原理.(使用权,与所有权)
@autoreleasepool { //面试题: for (NSInteger i = 0; i<10; i++) { @autoreleasepool { Person * per1 = [[Person alloc]initWithName:@"memgmemg" sex:@"M" age:12]; [per1 retain]; [per1 autorelease]; return 0; }
Person *p = [[Person alloc]initWithName:@"lili" sex:@"m" age:30];[p retain];[p retain];[p release];release]; p = nil;//把对象清为空防止出现野指针. release];//多次释放时,释放release次数超过retain相加次数,则release释放的不属于自己的内存空间,在该内存中,在内存已经被释放完毕.称为野指针(也就是释放不属于自己空间,)
过度释放会导致程序立即崩溃.
Person *p = [[Person alloc]initWithName:@"lili" sex:@"m" age:30];[p retain];[p retain];[p retain];[p retain]; //p = @"lisi" (此代码为重指向) 常量区引用计数味无穷大,无法释放.//常量区内容需要释放,只有在堆区才会被释放.
[p autorelease] //autorelease 延迟释放,被声明为autorelease的对象会被放进离他最近的自动释放池@NSAutorelease { }中.],当自动释放池自动销毁才会给池中每个对象发送release消息-1.
retain拥有对象所有权即计数器加+1.
release释放的是自己拥有的东西,只能释放自己的所有权不能释放别人东西 }
本文出自 “8464349” 博客,转载请与作者联系!
原文:http://8474349.blog.51cto.com/8464349/1361391