不久前在開發中,有乙個只有內部方法才能修改的變數,我就用readonly來修飾。
@property
(nonatomic
, readonly,
getter
=isshouldrequestmsg)
bool
shouldrequestmsg;
但是當值發生變化的時候,想要引發外部類物件的一些操作,我就想使用kvo去觀測這個值的變化。
addobserver
:self
forkeypath
:@"shouldrequestmsg"
options
:nskeyvalueobservingoptionnew
context
:null];
本以為實現了這些就可以獲取想要的狀態變化,斷點卻發現沒碰到對應的kvo方法。
對於readonly的屬性,外部只有read的許可權,沒有write的許可權,也就是說外部不能明確的檢測到乙個readonly屬性的變化狀態。
所以預期的效果,沒有達到,後來把readonly的修飾符去掉,程式如想象的正常執行。
@property
(nonatomic
,getter
=isshouldrequestmsg)
bool
shouldrequestmsg;
注意在addobserver的類的實現中,在dealloc方法中去remove掉對應keypath的observer。
如下:removeobserver
:self
forkeypath
:@"shouldrequestmsg"];
如果你在dealloc方法中,remove掉沒有註冊的keypath,將會造成crash.
總結:kvo機制的執行是可取的,但是凡是涉及到屬性的讀取狀態的變化的,還是要慎重使用,注意細節,方能減少bug的出現。
在iOS開發中使用FMDB
sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...
在iOS開發中使用FMDB
sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...
在iOS開發中使用FMDB
sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...