没有,一个类只能有一个父类;
通过协议protocol来实现的;
重写:指子类重新实现一个与父类具有相同的方法名、返回类型和参数的方法;
重载:指子类实现一个与父类具有相同的方法名、参数个数,不同的参数类型和返回值类型的方法;OC中是没有真正的重载;可以通过增加参数个数和描述来实现重载;主要是OC中对函数名的规定和C不同,参数的描述也是参数名的一部分;
不同对象以自己的方式响应相同消息的能力。
通过id类型和动态绑定机制来实现。
id类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。id类型是多态和动态绑定的基础。
static修饰的全局变量,会存储在静态数据区,在程序刚开始运行时完成唯一的一次初始化,但限制其作用域,只在当前.m文件中使用;
两者都是静态存储方式;在程序运行的第一时间初始化。
区别在于作用域不同:
普通的全局变量:作用域是整个源程序;
static全局变量:作用域是定义该变量的当前源文件;
浅拷贝:只拷贝了对象的指针,并没有拷贝对象内存中的资源;
深拷贝:不仅拷贝了指针,还开辟了新的内存,拷贝了原对象内存中的资源;
http://my.oschina.net/u/1428392/blog/293597
ARC下的对象默认都是添加了__strong修饰符的,表示强引用;
当为了避免循环引用时,可以在对象前添加__weak修饰符来修饰对象,表示弱引用。
给.m文件加标记"-fno-objc-arc"
通过开启Scheme(运行方案)中的Enable Zombie Objects选项和使用Xcode自带的instruments工具来检查内存泄漏。
assign:用于基本数据类型(非对象),代理;
copy, retain:对象;
ARC下使用weak和strong来代替copy和retain;
weak相当于copy,strong相当于retain;
避免循环引用;
作用:可以在不获悉,不改变原来代码的情况下扩充类的方法或属性;
类别:不可以添加属性,只能添加方法,添加的方法可以不实现;
类扩展:是没有类别名的类别;可以添加属性;添加的方法必须实现;
1.单例
2.点语法
3.委托代理
4.通知中心
它们都可以用于在不同的视图间传递参数。
委托代理是1对1;
通知中心是1对多;
接口声明(创建协议,可单独创建,也可在被代理类中创建),
接口回调(被代理类创建Delegate成员变量),
接口实现(代理类,遵守协议,实现接口方法);
http://blog.csdn.net/totogo2010/article/details/8048652
http://blog.csdn.net/ryantang03/article/details/8264072
为什么要优化?
因为在自定义Cell时,会加入很多的UIView,UILabel、UIImageView等控件,当数据量大的时候,会增加大量的渲染时间,从而导致滑动卡顿的现象发生。
怎么优化?
重写drawRect方法,将图片、文字直接写入cell中。
为UIView增加圆角、阴影等外观上的美化;
view.layer.cornerRadius = 10.0f;
iOS6之前使用AutoResizing,停靠模式;
iOS6新增自动布局(AutoLayout), 使用约束;
通过代码判断设备的型号和系统版本,再添加针对各个版本的处理。
判断代码为:[UIDevice currentDevice].model
1.通过web服务,保存在服务器上;
2.使用plist文件保存基本的数据类型,比如字符串、数组、字典等;
3.通过NSCoder固化机制,将对象保存在文件中,一般是封装的类;
3.通过SQlite或CoreData保存在文件数据库中,针对大量的数据类的存储。
该类需要遵守<NSCoding>协议,实现协议中声明的编码和解码方法;
create, insert, select;
CoreData本身并不是数据库,它是Apple提供的对象持久化存储技术,由CoreData.framework框架提供支持,可以使用SQLite作为持久化存储的类型。
一个常用的优秀的开源数据库
第三方:ASIHttpRequest
系统自带:NSURLConnection
程序在后台时,会断开连接;
同步请求:可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。
异步请求:不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。
它们是HTTP的两种请求方法;
GET请求,将参数直接写在URL上。操作简单,但易被外界看到,安全性不高,地址最多255字节;
POST请求,将参数放到body里面。操作相对复杂,需要将参数和地址分开,安全性高。
JSON和XML
它们都是常用的数据交换格式。
JSON使用SBJson等解析;
XML使用GData等解析;
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket由IP地址和端口号唯一确定;
Socket通常用于实现客户方和服务方的连接;
连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
http是基于socket之上的。socket是一套完成tcp,udp协议的接口。
TCP/IP是传输层协议,主要解决数据如何在网络中传输;
HTTP是应用层协议,主要解决如何包装数据;
http连接是短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
Socket连接是长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;
TCP(传输控制协议)是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据的安全性、稳定性、正确性,但传输速度稍低;
建立TCP连接需要三次握手:1、主机A向主机B发送连接请求数据包;2、主机B向主机A发送同意连接和同步请求数据包;3、主机A向主机B发送确认请求数据包;
UDP(用户数据报协议)是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!传输速度快、但安全性、稳定性、数据的正确性低;
NSThread
NSOperationQueue
GCD
对于一些耗时的任务,比如从网络下载数据,需要放到子线程中运行。否则在主线程中长时间的等待,会降低用户体验度。
不会。开辟过多的线程,反而会降低程序的运行效率。
因为子线程的runloop结束了,应该在子线程中添加以下代码
[NSRunloop currentRunloop] run];让runloop保持运行。
MVC、委托代理、通知中心、单例、工厂、策略、装饰、中介者、观察者;
1.声明一个类方法,作为单例类对外获取唯一实例的借口;
2.为单例对象实现一个静态实例,并初始化,然后设置成nil;
3.实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例;并使用dispatch_one或者@synchronized对实现代码加锁,保证线程安全;
4.重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例;
5.适当实现allocWitheZone,copyWithZone,release和autorelease。
1.工厂模式实质上:
是使用工厂类方法统一创建产品类实例,来代替产品类各自通过alloc方法创建实例。
2.好处:
易于修改和扩展产品类,而不必去修改主程序的相关代码。
3.怎么使用?
1)从多个产品类中抽象出产品基类或者是协议;
2)创建工厂类,并创建一个生产产品类实例的类方法,返回值为产品基类或者id <协议>, 参数为产品类型;
3)在需要创建产品类实例的地方,直接实用工厂类调用类方法来创建;
openURL
iPad开发独有的控件:UISplitViewController(分割视图)和UIPopoverController(泡泡视图)。