`iOS编程实战`读书笔记

iOS编程实战读书笔记

1.弱引用容器

常见的容器有NSArray, NSSetNSDictionary;

NSArrayNSSet会保留保存在其中的对象,
NSDictionary不光会保留值,还要复制键.

从iOS6开始有了新的容器类:NSPointerArray, NSHashTableNSMapTable, 它们统称为指针容器类, 有时候配置为使用NSPointerFuntions

  • NSPointerArray 类似于 NSArray
  • NSHashTable 类似于 NSSet
  • NSMapTable 类似于 NSDictionary

这些新容器都可以配置为持有弱引用/非对象的指针或者其他罕见情形, NSPointerArray还有一个好处是可以存户Null值.

2. UIKit和视图绘图周期

  • iOS在运行循环中整合所有的绘图请求, 并一次将他们绘制出来
  • 不能在主线程中进行复杂的处理
  • 不能在主线程之外的主视图上下文中绘制. 开发者需要检查每个UIKit方法以确保它没有主线程需求. 只要不是在主线程绘制. 一些UIKit方法是可以在后台线程中使用的.

3.视图绘制与视图布局

  • 如果一个视图调用了 setNeedsDisplay方法, 他就被标记为"需要刷新的", 并且会在下一次绘图周期中重新绘制.
  • 如果数据改变后只需要进行布局更新(而非绘制), 则可以调用 setNeedsDisplay方法.

4.混用UIKit和Core Graphics

在 drawRect: 方法之外, 你可能会发现使用Core Graphics绘制的东西上下颠倒. 这个是因为坐标系不同的原因. UIKit是左上点为原点, 而Core Graphics的原点是在左下.

只要使用 drawRect: 方法中的 UIGraphicsGetCurrentContext 返回的上下文, 那么一切都是正常的, 因为这个上下文是已经翻转过的. 不过, 如果使用CGBitmapContextCreate 这样的函数创建自己的上下文, 它会以左下角为原点. 可以进行反向计算或者翻转上下文:

  • Core Graphics 转 UIKit, 先平移了上下文的高度并使用一个负数比例进行反转.
    CGContextTranslateCTM(context, 0.0f, height);
    CGContextScaleCTM(context, 1.0f, -1.0f);

  • UIKit 转 Core Graphics 先反转, 然后平移.
    CGContextScaleCTM(context, 1.0f, -1.0f);
    CGContextTranslateCTM(context, 0.0f, -height);

5.透明(alpha),不透明(opaque)与隐藏(hidden)

看似有关实际无关的属性

alpha

alpha 属性决定了视图会通过像素显示多少信息. 1意味着所有的视图信息都在像素上表现出来, 0意味着没有视图信息能在像素上显示出来.

iPhone上没有东西是真正透明的. 说到底, 它只是关于如何绘制像素的问题.

opaque

opaque并不会实际升高或降低它的透明度. 绘图系统会根据opaque来优化. 如果视图标记为opaque, 便是向绘图系统'许诺'即将绘制的每一个像素都要使用全部透明的颜色. 这便允许绘图系统忽略在下面的视图, 这样可以改善性能, 尤其是在进行变性时. 但是视图中有特定的透明区域, 或者并不绘制矩形所有像素, 设置opaque会导致不可预测的结果.设置一个非透明的backgroundColor属性可以确保绘制所有像素.

与opaque紧密相关的是 clearsContextBeforeDrawing. 它的默认值为Yes, 而且会在调用 drawRect:之前将上下文设置为透明黑底. 这会避免视图中的任何垃圾数据. 这种操作非常快, 不过如果打算绘制每一个像素, 将其设置为 NO 可能会好些.

hidden

hidden代表视图并不会被绘制. 它通常等同于 alpha 为0, 以为hidden属性不能产生动画效果. 所以通常还是以动画模拟 alpha 到值 0的方法隐藏视图.

你可以创建一个透明视图来接收事件. alpha 为 1 , opaque 为 NO 且 backgroundColor 为nil 或 [UIColor clearColor] 来接收触摸事件. 如果用于碰撞检测, 拥有透明背景的视图仍然被认为是可视的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容