iOS 开发常见问题整理 (持续更新)

  • sdwebimage 无法下载图片 报403错误 检查请求头是否加入user-agent,如下:
NSString * userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)",
                            [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey],
                            [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey],
                            [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion],
                            [[UIScreen mainScreen] scale]];
[[SDWebImageDownloader sharedDownloader] setValue:userAgent forHTTPHeaderField:@"User-Agent"];

github 获得知识

  • iOS 8下 当viewcontroller 下有一个scrollview 并设置代理为当前viewcontroller 滑动过程中退出当前页面时会有崩溃现象,解决方式为 viewcontroller dealloc时 设置scrollviewdelegatenil

  • 直接设置contentOffset属性与 使用contentOffset:animated:的区别

    如果animated这一参数设置为NO,或者直接设置contentOffset这个property,delegate会收到一个scrollViewDidScroll:消息。如果animated这一参数设置为YES,则在整个动画过程中,delegate会收到一系列的scrollViewDidScroll:消息,并且当动画完成时,还会收到一个scrollViewDidEndScrollingAnimation:消息。

  • swift 弱引用

    weak字符串修饰的即为弱引用对象,并不会引起引用计数增加,当对象被释放(回收)之后,weak修饰的变量将指向nil,weak引用是一种非常安全的引用方式。ps:weak修饰的类型一定是个可选值类型unowned字符串修饰的也为弱引用对象,但是与weak不同的是,unowned不允许设置为可选值类型,也不允许nil值的情况。之前的Swift版本,unowned修饰的对象可以正常书写,只有在运行时才会崩溃报错,在3.0版本编译器会检测其修饰的对象是否为nil

  • hash 与 isEqual

    当一个实例作为NSDictionary的key时、作为NSSet的一个元素时,会调用hash方法

    为了优化判等的效率, 基于hash的NSSet和NSDictionary在判断成员是否相等时, 会这样做

    • Step 1: 集成成员的hash值是否和目标hash值相等, 如果相同进入Step 2, 如果不等, 直接判断不相等
    • Step 2: hash值相同(即Step 1)的情况下, 再进行对象判等, 作为判等的结果

    简单地说就是

    hash值是对象判等的必要非充分条件

推荐阅读更多精彩内容