91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

設計模式------單利的模式

發布時間:2020-07-20 09:28:39 來源:網絡 閱讀:597 作者:Im劉亞芳 欄目:開發技術

單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例。這個類稱為單例類。

1.單例模式的要點:

  顯然單例模式的要點有三個;一是某個類只能有一個實例二是它必須自行創建這個實例三是它必須自行向整個系統提供這個實例

2.單例模式的優點:

  1.實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例。

  2.靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程

 

單例模式是 iOS 常用設計模式中的一種. 

單例設計模式作用:是這個類的一個對象成為系統中的唯一實例,因此 需要一種唯一的方法去創建這個對象并返回這個對象的地址..那么, 我們適合使用單利模式呢?

1、類只能有一個實例,而且必須從一個為人熟知的訪問點對其訪問。2、這個唯一的實例只能通過子類化進行擴展,而且擴展的對象不會破壞客戶端代碼。

那么用Objective-C如何實現單例模式呢?下面我們來新建一個Singleton類,在Singleton.h中實現如下

  1. @interface Singleton : NSObject  
      
    + (Singleton *) sharedInstance;  
      
    @end

 

 

在Singleton.m

  1. @implementation Singleton  
      
    static Singleton * sharedSingleton = nil;  
      
    + (Singleton *) sharedInstance  
    {  
        if (sharedSingleton == nil) {  
            sharedSingleton = [[Singleton alloc] init];  
        }  
        return sharedSingleton;  
    }  
      
    @end


這樣就創建一個簡單的單例模式,實際上有一部分程序員也是這樣實現的,但實際上這是一個不“嚴格”版本,在實際中使用,可能會遇到發起調用的對象不能以其他分配方式實例化單例對象,否則,就會創建多個實例。(之前有人和我討論過這個問題,說使用者應該嚴格按照接口來使用,當實際上Singleton是一個對象,我們不能保證使用者不會使用其他的方法去創建(比如alloc),這個時候他就會創建多個實例,這樣就會出現這些無法感知的bug)

 

 

下面我對Singleton.m的進行改進

@implementation Singleton  
  
static Singleton * sharedSingleton = nil;  
  
+ (Singleton *) sharedInstance  
{  
    if (sharedSingleton == nil) {  
        sharedSingleton = [[super allocWithZone:NULL] init];  
    }  
    return sharedSingleton;  
}  
  
+ (id) allocWithZone:(struct _NSZone *)zone  
{  
    return [[self sharedInstance] retain];  
}  
  
- (id) copyWithZone:(NSZone *) zone  
{  
    return self;  
}  
  
- (id) retain  
{  
    return self;  
}  
  
- (NSUInteger) retainCount  
{  
    return NSUIntegerMax;  
}  
  
  
- (void) release  
{  
    //  
}  
  
- (id) autorelease  
{  
    return self;  
}  
  
@end
也許你注意到了,我重載了allocWithZone:,保持了從sharedInstance方法返回的單例對象,使用者哪怕使用alloc時也會返回唯一的實例(alloc方法中會先調用allocWithZone:創建對象)。而retain等內存管理的函數也被重載了,這樣做讓我們有了把Singleton類變得“嚴格”了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂溪县| 壤塘县| 巴南区| 大石桥市| 营口市| 桑日县| 内黄县| 山西省| 壤塘县| 四子王旗| 武胜县| 西城区| 江津市| 江城| 高邮市| 北辰区| 洞头县| 台州市| 龙州县| 苍梧县| 兴文县| 濉溪县| 龙泉市| 枣强县| 顺平县| 日土县| 项城市| 长汀县| 马公市| 日喀则市| 南部县| 罗田县| 和林格尔县| 手游| 桐柏县| 无极县| 余庆县| 呼图壁县| 通许县| 社会| 新巴尔虎左旗|