其方式是重寫release,retain,retaincount,autorelease,allocwithzone和copywithzone等方法。
1 重寫allocwithzone和copywithzone的目的是外部在多次呼叫alloc的時候,內部能夠確保物件只建立了一次。
2 重寫release、retain、autorelease、retaincount避免單件物件被外部釋放。(官方文件的舊版本沒有重寫這些方法導致物件有可能被over-release,即多次release,導致崩潰)
兩個缺點:
a 隱藏了在物件生命週期管理時出現的bug。
對物件的引用出錯的原因必然是程式本身的錯誤,隱藏物件的引用計數錯誤就是隱藏了應用程式的錯誤。
從工程角度上講,崩潰要比程式的邏輯錯誤容易定位。
解決方法:建議在release、retain、autorelease裡面做一些內部的呼叫次數監控,一旦發現外部呼叫不平衡就發出警告。
b 物件可以被多次init。
多次呼叫init導致錯誤的可能性還是有的,這種錯誤包括重複載入某些資源降低效能。
解決方法:重寫init並在內部判重就可以了。
c 多執行緒安全
解決方法:在sharedmanager中加入同步**塊,**:
+ (mygizmoclass*)sharedmanager
}return sharedgizmomanager;
}
附官方單件模式的**
static mygizmoclass *sharedgizmomanager = nil;
+ (mygizmoclass*)sharedmanager
return sharedgizmomanager;
}+ (id)allocwithzone:(nszone *)zone
- (id)copywithzone:(nszone *)zone
- (id)retain
- (nsuinteger)retaincount
- (void)release
- (id)autorelease
iOS Objective C的屬性修飾符
在蘋果引入了arc之後,屬性的也相對應的增加了一些修飾符。所以這裡我們分別對mrc和arc兩種情況下的屬性修飾符進行學習。其實主要的區別集中在對物件生命週期進行描述的屬性修飾符會有所區別而已。任何屬性都可以宣告為readwrite或readonly,且預設設定為readwrite。此外,還可以自定義...
iOS objective c產生隨機數的方法
objective c 中三種產生隨機數的方法 arc4random 比較精確不需要生成隨即種子 通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 ccrandom...
單例 ,真正的單例
單例模式是24種設計模式中的一種,給人的第一反應是乙個類只有乙個例項,非常好理解。單例模式的優點是減少記憶體開銷,避免資源的多重占用,提供全域性訪問點,嚴格控制訪問,也有缺點沒有介面擴充套件困難。單例模式應用也非常的廣泛,string,mybatis等框架中都有大量的運用。大家也很熟悉什麼懶漢模式,...