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,078评论 0 10
  • 1、 沙盒概念基本介绍 iOS 应用程序只能在该 app 的文件系统中读取。这个默认的 app 文件系统就是我们说...
    Laughingg阅读 2,741评论 2 10
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,203评论 30 471
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,454评论 2 4
  • 27、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是...
    烟雨平生花飞舞阅读 612评论 0 1