ios高级编程相关

来源:互联网 发布:mac photoshop cc 编辑:程序博客网 时间:2024/05/06 10:42

原文地址:点击打开链接

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放在对象的内存块的头部

12345678910
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的实现大同小异

123456789
- (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.cocoanetics.com/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

  • 这本书前面都是讲1.1的, 比较详细, 能了解个大概
  • 建议结合以下部分一起看:
    • raywenderlich的OpenGL部分
      • http://www.raywenderlich.com/tutorials
    • 这里有个中文的教程貌似是翻译的(但是找不到原文), 写的很好, 也是讲1.*的
      • http://www.ityran.com/portal.php?mod=list&catid=3
    • 这里有个中文的OpenGLES 2.0的教程, 写得挺好 http://blog.csdn.net/kesalin/article/category/1288827
    • 线性代数跟我一样忘完了的同学可以补习一下:
      • 孟岩的理解矩阵系列
        • 理解矩阵(一)
        • 理解矩阵(二)
        • 理解矩阵(三)
      • MIT的线性代数网易公开课翻译版
        • http://v.163.com/special/opencourse/daishu.html
    • IOS中二维坐标变换
  • 以上都看了可以再看看OpenGL的应用(游戏的话基本都用到了, 就不说了):
    • 一个OpenGL封装成Objective-C的库, 我在人人写的软件光影DV就是用到了这套库…
      • https://github.com/BradLarson/GPUImage
    • Learning OpenGL with GPUImage

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
原创粉丝点击