1,block循环引用,self要用weakSelf来替换
2,如果tableViewCell中放了很多imageView的话,让后台生成指定尺寸的图片,避免图片过大引起的加载速度慢
3,把不需要在主线程执行的任务放到NSOperationQueue或GCD
4,NSTimer:在scrollView滑动时会进入runloop的跟随模式,这时候NSTimer的回调会暂停执行,这样做是为了防止UI滑动时执行太多代码出现卡顿现象,如认为可以让其响应应该将NSTimer加到commen模式下,这种模式下在default和跟随模式下都会执行NSTimer的回调。
5,有的必须放到主线程执行的代码可以放到一个独立的代码块,并放到default runloop mode下运行(---------》》》》》》》)
6,内存使用的尖峰时刻:app启动时加载尽量少的对象,会加快启动速度,可以延迟的在启动后放到子线程执行,否则放到runloop的default代码块下执行(ViewController viewDidLoad中同理)
7,UIWebView 内存优化(---------》》》》》》》)
8,重用几率很低的图片不用imageNamed来加载,用imageWithContentsOfFile来加载,加载完立马释放,不放到内存中
9,UIWebView将图片缓存到app中,首先要将原html的String替换src为esrc,禁止他的图片加载,然后js遍历出所有esrc的image放到array中,发送给OC端,OC端收到后下载下来,将src=的网址替换为本地下载的图片(---------》》》》》》》)
10,delegate底层是一个指针,比如tableView的delegate指针指向控制器,当tableView内部需要调用控制器获取cell的高度的时候就用指针指向控制器,然后调用控制器的方法返回给tableView高度。
11,block底层是一个函数指针,指向一个__main_block_impl_0类型结构体调用,c++中结构体相当于OC的类,有自己的属性,构造方法和方法。
其中__block_impl指向block代码块对应c++中生成的static函数,__main_block_desc_0用于记录block的内存大小。
当有外部变量在block中使用时,runtime会将外部变量作为参数传给__main_block_impl_0的函数指针,如果没有加__block的话是值传递,加了则外部变量会生成一个结构体类型,结构体作为地址将传递给__main_block_impl_0,这时候因为是值传递所以可以修改外部变量的值
参考:http://www.jianshu.com/p/e23078c11518
12,设置圆角系统有方法cornerRadius,但是像imageView,label等需要同时设置masksToBounds,平滑到圆角,但是这个属性会形成离屏渲染,当tableView中圆角过多时,将导致帧率降低,优化方式是将图片进行裁剪,裁成圆角
参考:http://www.jianshu.com/p/f970872fdc22
13,kvo可以用来监听model值的变化,当有变化的时候对应修改view的显示
kvo实现原理:当某个类的对象第一次被观察时,系统就会在runtime时动态创建该类的一个派生类,派生类中重写基类中被观察属性的setter方法,并重写了dealloc来释放资源,把isa指针指向派生类,然后当其发生改变时发送通知给观察者。
网友评论