移動端 -- IOS開發知識點總結

工作之余,總結一下這幾年IOS開發知識點。

1. NSString為什么要用copy關鍵字,用strong會有什么問題

對源頭是NSMutableString的字符串,strong僅僅是指針引用,增加了引用計數器,這樣源頭改變的時候,用這種strong方式聲明的變量(無論被賦值的變量是可變的還是不可變的),它也會跟著改變;而copy聲明的變量,它不會跟著源頭改變,它實際上是深拷貝。

對源頭是NSString的字符串,無論是strong聲明的變量還是copy聲明的變量,當第二次源頭的字符串重新指向其它的地方的時候,它還是指向原來的最初的那個位置,也就是說其實二者都是指針引用,也就是淺拷貝。

另外說明一下,這兩者對內存計數的影響都是一樣的,都會增加內存引用計數,都需要在最后的時候做處理。

其實說白了,對字符串為啥要用這兩種方式?我覺得還是一個安全問題,比如聲明的一個NSString *mStr變量,然后把一個NSMutableString *str變量的賦值給它了,如果要求mStr跟著str變化,那么就用strong;如果mStr不能跟著str一起變化,那就用copy。而對于要把NSString類型的字符串賦值給mStr,那兩都沒啥區別。不會影響安全性,內存管理也一樣。

2. iOS持久化方式有哪些

因為iOS的沙盒機制,所以持久化分為兩類:沙盒內和沙盒外。

沙盒內:

NSKeyedArchiver? 遵循了NSCoding協議 歸檔解檔

NSUserDefaults? ? ?

plist? ??

數據庫sqlite3

沙盒外:

KeyChain

沙盒內的方式在應用被刪除后數據都會丟失,如果想要不丟失則需要使用KeyChain。

KeyChain本質是一個sqlite數據庫,其保存的所有數據都是加密過的。

KeyChain分為私有和公有,公有則需要指定group,一個group中的應用可以共享此KeyChain。

使用KeyChain過程中要理解下面幾個問題:

1:自己使用的KeyChain和系統自帶的KeyChain數據是隔離的,內部應該是不同數據庫文件;

2:KeyChain數據可備份到iCloud中;

3:不需要聯網,也不用登陸iCloud賬號;一個設備一個sqlite數據庫,但是不同應用組不共享數據;

4:要在另一臺設備上使用當前設備存儲的KeyChain信息,需要當前設備進行數據備份,

再在另一設備上復原數據;比較常用的是iCloud備份方式;

5:系統自帶的KeyChain中賬號密碼分類數據可在系統設置->賬號與密碼里面看到,

你退出iCloud賬號還是存在,只是iCloud會幫你備份如果你設置了的話;這個和照片是一樣的道理。

3.?id和NSObject*的區別

id可以指向oc中的任何對象,而NSObject*只能指向NSObject及子類對象。

4. runtime是什么

http://www.lxweimin.com/p/19f280afcb24

5. KVC/KVO

https://blog.csdn.net/yuwuchaio/article/details/80701681

6.?Property修飾符

https://blog.csdn.net/shenzhonglaoxu/article/details/47807081

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容