国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

IOS開發模式——單例

2019-11-14 20:27:48
字體:
來源:轉載
供稿:網友

  單例的模式在網上有很多,今天發下我個人對單例模式的理解。整個app中只存在一個實例,也只會進行一次實例,在實例完成之后是不可以人釋放的(當App關閉之后,等系統自己回收)。

也就是說,如果我們寫得某個類符合了上述條件,那么我們也可以稱這個類為單例。

  在非ARC的工程中,我們需要針對alloc,retain,copy等會增加retaincount的參數加以控制,對release和autorelease等減少retailcount的操作增加控制,以確保單一實例,絕不釋放。  

  在ARC的工廠中,由于,內存管理是有系統來完成的,確切的說單例是不存在的,以為在內存吃緊的情況下,系統會回收,這樣造成,可能重復實例。這樣的話,你之前實例里面保存的數據就會丟失,所以說不存在。(個人理解)

  下面來分享下我是如何做單例的

非ARC單例:

 

#import <Foundation/Foundation.h>@interface BaseSingle : NSObject+(id)getInstance;@end

.m文件中,重寫方法增加控制

#import "BaseSingle.h"@implementation BaseSingle+(id)getInstance{    return nil;}+(id)allocWithZone:(struct _NSZone *)zone{    return [[self getInstance] retain];}-(id)copyWithZone:(struct _NSZone *)zone{    return self;}-(id)retain{    return self;}-(NSUInteger)retainCount{    return NSUIntegerMax;}-(oneway void)release{    return;}-(id)autorelease{    return self;}

然后我們調用的時候繼承下BaseSingle 重寫 getInstance方法。

例如:其中FileDownLoadManager 繼承 BaseSingle

+(FileDownLoadManager *)getInstance{    static FileDownLoadManager * shareFileDownLoadManager = nil;    @synchronized(self){        if (shareFileDownLoadManager == nil) {            shareFileDownLoadManager = [NSAllocateObject([self class], 0, NULL) init];        }    }    return shareFileDownLoadManager;}

這樣一個妥妥的單例就完成了。

ARC單例:

  關于ARC單例就不在這里贅述了,相信大家都懂了。。。嘿嘿

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 任丘市| 和田县| 河津市| 靖宇县| 思南县| 平陆县| 黑河市| 蒲城县| 巴彦县| 青州市| 上高县| 抚宁县| 平遥县| 盘山县| 哈尔滨市| 长垣县| 剑阁县| 云南省| 民丰县| 玛多县| 稻城县| 镇坪县| 衡山县| 衡水市| 徐闻县| 随州市| 雷山县| 同仁县| 瓦房店市| 舞阳县| 长兴县| 鄂州市| 沐川县| 东阿县| 铁岭县| 襄城县| 台山市| 平乐县| 崇信县| 桐庐县| 濮阳县|