当前位置: 首页>編程日記>正文

ios高级编程相关

ios高级编程相关

原文地址:点击打开链接

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.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 还没看…


https://www.fengoutiyan.com/post/15246.html

相关文章:

  • ios程序员招聘
  • ios编程软件
  • 苹果编程
  • ios编程
  • ios编程软件c语言
  • ios编写c语言的软件
  • ios写代码软件
  • ios上的编程软件
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機