2011年1月10日 星期一
2010年10月28日 星期四
Objective-C 之 日期字串格式化與轉換
在撰寫程式的時候,時常需要把日期物件跟它的字串表示式來做互轉的動作。在Java中,可以透過java.text.SimpleDateFormat來做。而在Objective-C中,也有類似的類別,叫做NSDateFormatter。
NSDateFormatter的用法其實很簡單,就是建立一個NSDateFormatter物件,然後設定需要的dateFormat。之後如果是要把日期物件轉換為字串表示法,則用stringFromDate:;反之,則是使用dateFromString:。詳細內容可以參考:Simple methods for date formatting and transcoding
2010年10月7日 星期四
Objective-C的@synchronized
在Objective-C中,也有synchronized這個keyword,也是用來作thread synchronization,正是語法是
@synchronized(id) { ... },其中id是只要鎖定的物件pointer。而比較常用的情況是
@synchronized(self)
有趣的是,如果@synchronized(self)語法出現在一般的instance method,則self是指該instance;但是如果是出現在static method,則self是指該class本身。
2010年9月26日 星期日
抱怨!Google的產品彼此支援度不佳....
剛剛在編輯blogger上的文章時,發現不管怎麼弄,文章內的style一直就是弄不好...最後,想到該不會是Google Chrome的問題吧...所以換到Safari 5.0.2再試一次,結果就OK了...........
其實不只這件,Chrome在某些HTML的呈現與layout效果,似乎也不是很正確,反而是Safari真的是比較正確一點,也比較沒有問題...要不是Safari的memory usage比較大,而且
這真的是一大諷刺啊...Google...
Singleton pattern for Objective-C
在Java中,要撰寫一個應用Singleton pattern的class十分容易。但是在Objective-C中,就沒這麼簡單了。原因在於物件與記憶體的配置與管理機制是完全不同的(個人見解,不見得對)。
其實原理是都很類似,就是設法讓app只產生一個object instance,而且是透過特定的static method來獲得這個instance,而不是透過constructor來建立各個獨立的instance。對於一些某些需要集中管理的資訊或是資源,singleton pattern十分有用。
在Objective-C中,因為無法宣告constructor為private,所以很難避免使用者去呼叫。另外,因為Objective-C的alloc/retain/release/dealloc的機制,所以我們也必須去處理有關instance reference count的問題,不然很容易會出現記憶體管理的問題...而造成災難。
如何撰寫呢?首先,先在header file中定義要取得singleton instance的static method,例如:
+ (id) sharedInstance;然後,在對應的.m檔案中,添加下列內容:
static MyManager *instance = nil;@implementation MyManager#pragma mark Singleton Methods+ (id)sharedInstance {@synchronized(self) {if(sharedMyManager == nil)sharedMyManager = [[super allocWithZone:NULL] init];}return sharedMyManager;}+ (id)allocWithZone:(NSZone *)zone {return [[self sharedManager] retain];}- (id)copyWithZone:(NSZone *)zone {return self;}- (id)retain {return self;}- (unsigned)retainCount {return UINT_MAX; //denotes an object that cannot be released}- (void)release {// never release}- (id)autorelease {return self;}- (id)init {if (self = [super init]) {// initialize your instance variables}return self;}- (void)dealloc {// Should never be called, but just here for clarity really.// release your instance variables[super dealloc];}@end
首先,是定義全域變數instance,用來表示此class的singleton instance。然後實作之前定義的singleton method,讓它傳回該instance variable,如此一來,只要呼叫此method,就可以取得同一個instance。其他的method都是override原本NSObject的定義。主要是用來處理reference count的問題,用來避免該instance被不小心release掉。其中,在init跟dealloc,可以對自己定義的instance variables做初始化跟回收。原則上,Objective-C的singleton pattern大概就是長這樣。
心得:比起Java,真的複雜多了...而且老實說,我也不知道這樣想是不是真的沒問題...只是目前google到的寫法,大多是長得類似這樣。
檢查MacBook Pro的硬體錯誤
一般來說,當安裝了新硬體之後出現問題,通常就是得自己想辦法從混亂的情況中,找出可能的原因。尤其是安裝了像是RAM或CPU這類的東西。有時候新的RAM有問題或是不合於目前硬體,是不會造成無法開機,但是就會讓你出現很多類似靈異現象的事。
在Windows中,至少我所知道的,就是只能用自己經驗跟third-party的硬體檢測軟體來判斷。但是每套硬體檢測軟體的結果又都不太一樣。
最近,我幫我的MacBook Pro加到了8GB,本來很高興的要工作,但是卻一直有很多不太正常的事...當然,很直覺的就判斷可能是RAM的問題。但是,該怎麼確定呢?於是Google了一些軟體做檢測,但是結果也是時好時壞。
但是後來發現,原來...Apple在出廠時所附的Application installation disc中,就有「Apple Hardware Test」的程式。只要把該片放入光碟機之中,然後在開機時按住「d」,就可以進入「Apple Hardware Test」,檢測很簡單,就是「標準測試」與「延伸測試」兩種。基本上,如果連標準測試都沒辦法過,就是有很明確的問題了。而我的問題在連續三次的標準測試都指出是RAM的問題...所以當然就是去創見處理囉~
結論:再也不用為了硬體檢測問題傷神了~
2010年9月25日 星期六
在Ubuntu Server Edition上安裝GUI介面
想把server改成用Ubuntu Server,但是又不想只用command line的方式來管理與設定系統。所以就想到在Ubuntu Server上面裝上gnome...但是又不想安裝完整的gnome
在參考How to install GUI in Ubuntu Server之後,自己就試著用
sudo apt-get install x-window-system-core gnome-core
結果真的可以安裝很簡易版本的gnome...幾乎沒有任何GUI app...連synaptic都沒有,所以只好再用apt-get來安裝
訂閱:
文章 (Atom)