1. 程式人生 > >oc55--ARC單個對象的內存管理

oc55--ARC單個對象的內存管理

class 插入 release ini 編譯 face func 釋放內存 代碼

//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end
//  Person.m

#import "Person.h"

@implementation Person

- (void)dealloc
{
    
    NSLog(@"%s", __func__);
//    [super dealloc];      //ARC不準寫
}
@end
//
//  main.m
//  ARC基本概念
//  不準許使用retain,release,dealloc裏面不準許[super dealloc],編譯器特性不是運行時特性,是xocde的功能,不是運行時跟你回收內存,而是xcode在編譯的時候會跟你插入retain,release,是xcode幫你寫了一些釋放內存的代碼。其他語言的垃圾回收機制是定時的去查看,沒有使用就回收,ARC是寫好了代碼,執行代碼,不是定時的去查看。完全消除了手動內存的管理。ios5之後默認就是ARC的。    插入代碼之後就可以在手機上面運行了。
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p1 = [[[Person alloc] init] autorelease]; //報錯,ARC不準寫autorelease //默認情況下所有的指針都是強指針 Person *p = [[Person alloc] init]; [p retain]; //報錯,ARC不準寫retain [p release]; //報錯,ARC不準寫release
{ Person *p5 = [[Person alloc]init]; //大括號執行完,p5就銷毀了,就沒有強指針指向這個對象了,那麽這個對象就銷毀了 } // [Person dealloc] { Person *p6 = [[Person alloc]init]; // p6 = nil; // 只要沒有強指針,對象就釋放。單個對象內存管理:不使用就置位nil, // [Person dealloc] } {
// ARC判斷對象是否釋放,並不是判斷引用計數。 ARC的判斷準則: 只要沒有強指針指向對象, 對象就會釋放 // 默認情況下所有的指針都是強指針 Person *p = [[Person alloc] init]; p = nil; //[Person dealloc] __strong Person *p1 = [[Person alloc] init]; // // 弱指針 __weak Person *p2 = p1; p1 = nil; //[Person dealloc] // 在開發中, 千萬不要使用一個弱指針保存一個剛剛創建的對象 // 立即釋放 __weak Person *p3 = [[Person alloc] init]; //[Person dealloc] } return 0; }

oc55--ARC單個對象的內存管理