1. 程式人生 > >單例物件建立

單例物件建立


//  單例

#import "FileManager.h"

@implementation FileManager

//2.定義全域性的靜態當前單例物件的例項,並初始化為nil.

static FileManager *manager = nil;

//- (instancetype)init

//{

//    self = [super init];

//    if (self) {

//        _name = @"預設值";

//    }

//    return self;

//}

//1.定義一個返回當前單例的物件的類方法

+ (FileManager *)sharedFileManger

{

//物件鎖,防止多個執行緒同時訪問建立多個物件。

@synchronized(self)

    {//加鎖

//如果當前單例物件為空

        if (!manager)

        {

            //建立當前單例物件

            manager = [[FileManager allocinit];

        }

        return manager;

    }//解鎖

}

//3.重寫allocWithZone:方法。防止通過alloc建立一個新的例項。

//alloc出觸發這個方法

+ (instancetype)allocWithZone:(struct

 _NSZone *)zone

{

//判斷當前單例物件是否為空,如果有值就直接返回,否則建立。

    if (!manager)

    {

        manager = [super allocWithZone:zone];

    }

returnmanager;

}

@end