分享

ios高级编程相关

 最初九月雪 2016-03-11

 原文地址:点击打开链接

Multithreading and Memory Management for iOS and OS X

  • 这本书太无敌了… 必须强烈推荐
  • 每个做iOS/Mac开发的都应该仔细研读几遍
  • 它能够解决你的疑惑:
    • isa是神马
    • block为什么要用copy
    • weak和assign在底层有什么不同
    • 还有曾经被__block+ARC坑过的同学, 叫你们不看这本书!
      • 这里的被坑狭义的解释请注意__block + ARC
      • 广义的就有很多坑了…
    • 还有很多GCD的特性的demo

以下是第二次精读此书的笔记

相关知识:
  • OSX和iOS是部分开源的. NSObject->Foundation Framework->Cocoa Framework, 不开源. Foundation是Objective-C的库(NSString, NSArray), 不开源. Core Foundation是C的库, 开源.
  • GNUsetp是Cocoa Framework的一个compatible implementation, 值得学习
  • 以前NSZone是用来防止内存碎片的.. 什么叫内存碎片见图:NSZone 不过现在的runtime mermory管理已经不需要这个了.. 所以zone相关的东西都会被oc的runtime忽略掉
  • NSAutoreleasePool对象会在每次NSRunloop中create和dispose
  • 所有strong, weak, __autorelease的变量都会被初始化成nil
短小精悍代码摘录:

alloc之GNUstep实现的例子, 跟apple的实现有点区别, apple的retain count是储存在一个hash table里面的, 而不是像GNUsetp这样将retain count放在对象的内存块的头部

1
2
3
4
5
6
7
8
9
10
struct obj_layout {
    NSUInteger retained;
};
+ (id) alloc {
    // 需要给一个object分配空间的时候, 用一个obj_layout来储存retain count, 跟这个object的地址放在一起
    int size = sizeof(struct obj_layout) + size_of_the_object;
    struct obj_layout *p = (struct obj_layout *)calloc(1, size);
    // 跳过1个单位的obj_layout步长, 返回指向object的地址的指针, 强转成id类型
    return (id)(p + 1);
}

retainCount之GNUstep实现的例子, 跟apple的实现大同小异

1
2
3
4
5
6
7
8
9
- (NSUInteger) retainCount {
    // 因为之前初始化的时候把retain值设置成0了, 实际上如果alloc的话, 值应该+1的
    return NSExtraRefCount(self) + 1;
}

inline NSUInteger NSExtraRefCount(id anObject){
    // 强转成obj_layout的指针 然后a[-1]使指针向前移动obj_layout_size的长度, 然后这个时候指向的就是obj_layout这个struct了, 然后返回retain count值
    return ((struct obj_layout *)anObject)[-1].retained;
}

Pro Core Data

  • Entity也是有继承关系的, 可以定义一个Abstract的Person供Player等Entity继承
  • 终于觉得NSCoding有用了
  • 第7-8章(性能和合并)还没看.. 暂时的项目还没有用到这么复杂的条件(只用到了简单合并) // TODO: 以后再回过来看
  • 关于多线程CoreData配合看看这篇文章: http://www./2012/07/multi-context-coredata/

iOS6 Cookbook

  • 初/中级iOS Developer必备…
  • 以前看过半本iOS5 Cookbook大部分都会了, 其他的用到的时候再查阅

iOS 6 In Practice

  • 跟上面那本书定位一样, 不过没Cookbook写的好…
  • 随便翻翻就扔掉了, 有时间看这个不如看官方文档/官方Sample Code/WWDC/iOS6 Cookbook

Pro OpenGL ES for iOS


Wrox.Professional.iOS.Network.Programming.Oct.2012

  • 有经验的同学可以直接从第6章开始看… 老外的书就是这么个特点, 循序渐进
  • 前五章 比较基础, 跟apple的文档差不多, 略读了一遍
  • 第六章 讲安全/加密/认证什么的, 读了一遍不是太清楚, 主要是暂时没用得上的地方, 以后用的时候还得再看看
  • 第七章 讲了一些优化的技巧, 除了cache部分其他都没感到共鸣… -_- 难道我悲剧了…
  • 第八章 是重头戏了..
    • 因为BSD的socket没法用一些特性, 比如VPN/启动socket时自动连wifi什么的, 所以苹果基于BSD的socket做了一层很轻的封装:CFNetwork
    • 然后有BSD socket和CFNetwork socket的简单demo, 被AFNetworking惯坏了… 这么效率低(指人写代码效率低)的方法先了解了解, 不到得已就不用了
    • 可以配合一些CFNetwork的文档看
  • 第九章 讲了一些调试的技巧和相关工具的使用… Charles相当好用. P.S. wireshark长的真丑啊…
  • 第十章 讲APN由于我之前看过, 直接略读了… 不过貌似讲得很详细的样子~~ 值得参考
  • 第十一章 的程序间相互调用, 之前也在别的地方看过了~~ 没看过的可以看看
  • 第十二章 Gamekit没什么兴趣, 跳过了
  • // TODO: 第十三章 Ad-Hoc Networking with Bonjour 还没看…

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多