内存恶鬼drawRect(续:答疑篇)

致谢

首先我没有想到前几天写的文章(内存恶鬼drawRect)会有这么多人关注,感谢大家的各种肯定和建议,谢谢大家。另外感谢@唐巧在公众号上发布本文,还要感谢各位同学的转发分享。

答疑

我的这篇拙作是因为同事辉哥的离职让我想起来去把当初和他解决的比较有意思的问题梳理总结一下,写的并不甚完美,通过公众号的回复和微博的回复私信等等,我收集了读者大大们的问题,对这些问题我会以我的能力一一尝试解答,如果有错误的地方还请不吝指出。

Read More

Comments

内存恶鬼drawRect

标题有点吓人,但是对于drawRect的评价倒是一点都不过分。在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增。下面我们来看一个例子。

去年的某天午后,北京的雾霾依旧像现在这样醇厚,我的同事辉哥像往常一样与我楼下约烟。我见辉哥表情凝重,便询问究竟。辉哥做了一个画板功能,但是苦于内存问题一直得不到解决。画板功能很简单,就是记录手指触摸的轨迹然后绘制在屏幕上。下面我们来看一张效果图:

效果图

如图我们看到左侧内存的状况随着手指的绘制逐渐恶化。另外细心的同学可以观察到,点击图中蓝色矩形按钮之后,便会弹出画板,而这时并没有进行任何的手指绘制,内存就突变为114MB,然后每当手指绘制开始时,内存立即增加到300MB左右稳定下来。对于正常的iOS App来讲,这么大的内存消耗是不能容忍的。

Read More

Comments

一句代码添加新浪弹出框动画.

新浪微博中的“加号按钮”点击后的弹出动画很有意思,每当一个人孤单寂寞冷的时候总会不停的点这个动画,终于忍不住自己撸了一个。废话不多说,直接上效果图:
演示1

Read More

Comments

copy协议解析

copy协议解析


在日常的 iOS 开发中,我们经常会用到如下代码:

1
@property (nonatomic,copy) NSString * name;

  很多人告诉你只要是 NSString 类型你就必须给我用 copy 来声明。但是如果我告诉你很多时候 NSDictionary 或者 NSArray 等等也有可能用 copy 来修饰的话,你是不是会独自混乱一会儿?所以如果你想知道这其中的原理请往下看,如果你只是停留在简单的使用层面,那么请去其他地方看更有意义的事情吧。

Read More

Comments

Swift Section Five(对象与类)

对象与类


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

//: Playground - noun: a place where people can play

import UIKit

//swift 第五课 对象与类

//1.类的创建方法

class Shape {

var numberOfSides = 0//属性的声明与变量常量的声明方式一致

let numberOfBadges = 1

var id: Int?

func simpleDescription() ->String {//方法同样一致

return "A shape with \(numberOfSides) sides."

}

func setupShapeId(id: Int) {

self.id = id

}

}

var shape = Shape()

shape.numberOfSides = 7

var description = shape.simpleDescription()

shape.setupShapeId(1993)

//2.类的初始化方法

class NamedShape {

var numberOfSides: Int = 0

var name: String

init(name: String){

self.name = name

}

func simpleDescription() ->String {

return "A shape with \(numberOfSides) sides."

}

}

源代码请前往我的github

Comments