iOS中你可能不知道的小知識點

當年學iOS的時候,有好多的知識點是知其然不知其所以然,隨著時間的推移,很多當時不懂或者不是很懂的知識點漸漸想明白了,所以特此記錄在此。這也是這篇文章的初衷,如果你看完這篇文章,會對其中幾條產生,原來是這樣的感嘆,那這篇文章我就寫的值了。

1.NSUserDefaults是個單例,它的本質其實是有個plist,你的setvalue forkey其實就是存入這個plist。這個plist特殊的地方是它的路徑是 沙盒/Library/Preferences ,它的名字是 bundleId.plist。

2.plist文件不能存儲自定義對象以及NSObject對象及非(NSString,NSNumber,NSData,NSDate,Boolen)對象的其他NSObject子類對象(如UIView等)的原因是plist文件只支持上述五種對象類型,其它的對象它不知道怎么存進去。

3.接上一條,解檔和歸檔自定義對象的本質是將自定義對象轉成NSData,實現NSCoding協議的2個方法其實就是告訴NSCoder按照怎么的方式去存儲和讀取對象的每個屬性,每個屬性都解決了,那么這個對象就知道怎么存儲和讀取了。[NSKeyedArchiver archivedDataWithRootObject:自定義對象],這個方法的內部會調用- (void)encodeWithCoder:(NSCoder *)coder。解檔方法同理。

4.當年作為萌新的我,始終想不明白,為啥遵守協議,給代理賦值為self,再實現代理方法,然后就會自動調用代理方法。為啥我明明沒看到【self myFunction】這樣的 【對象 代理方法】樣子的調用,那方法是怎么偷偷跑起來的呢?答案在下面

if ([_delegate respondsToSelector:@selector(myFunction)]) {
            [_delegate myFunction];
        }

5.其實不遵守代理的話沒有什么大不了,壞處一就是系統會給你報警告(因為@property (nonatomic, weak) id <XxDelegate> delegate;),壞處二就是代理方法你必須自己一個一個單詞敲了,xcode不會幫你補全。協議的本質就是方法聲明,你遵守了協議,就相當于聲明了這些方法。(比如自定義對象解檔與歸檔的類你不寫<NSCoding>不會有任何問題)

暫時就寫到這里,以后回想起其它的自己初學的時候沒理解透徹的小知識點會一點點的補充的。

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

推薦閱讀更多精彩內容

  • 1.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令偉閱讀 1,080評論 0 10
  • 1、 沙盒概念基本介紹 iOS 應用程序只能在該 app 的文件系統中讀取。這個默認的 app 文件系統就是我們說...
    Laughingg閱讀 2,769評論 2 10
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,475評論 2 4
  • 27、ViewController的didReceiveMemoryWarning是在什么時候調用的?默認的操作是...
    煙雨平生花飛舞閱讀 617評論 0 1