iOS部分理论:1.描述什么是MVC【MVC简介】是一种架构模式,它是苹果非常热衷的一种架构模式M:model模型保存所有应用程序里要使用的数据,比如一款太空大战游戏,模型要负责保存飞船的大小、飞行速度、位置信息、装载了多少只枪等等这些信息。并且要处理数据之间的逻辑比如飞船要打中敌机多少次能把敌机击落模型只是负责记录数据,跟数据的显示是没关系的,数据的显示是控制器跟视图的任务C:controller控制器负责控制视图如何去显示模型里要显示的数据它要负责把模型里的数据传输给视图(控制器是通过视图控制器的【生命周期】来控制视图变化的)V:view视图视图就是视图控制器的小跟班,它的任务就是负责显示视图,完全听命于视图控制器,视图控制器让视图做什么视图就做什么2.列举常用网络协议的端口号,例如HTTP默认的是80FTP文本传输协议20或21TELNET远程登录协议23POP3发邮件协议1103、frame与bounds的区别?Bounds的大小改变frame改变吗答:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)会发生改变4、UIViewController的生命周期方法调用顺序答:-(void)viewDidLoad;-(void)viewDidUnload;-(void)viewWillAppear:(BOOL)animated;-(void)viewDidAppear:(BOOL)animated;-(void)viewWillDisappear:(BOOL)animated;-(void)viewDidDisappear:(BOOL)animated;5、UITableView的执行流程是怎么样的答:numberOfSectionsInTableView:返回TableView的section数目tableView:titleForHeaderInSection:section1是否有表头标题栏tableView:numberOfRowsInSection:设置section1中行数tableView:heightForRowAtIndexPath:设置section1中row1行的高度……row2行的高度……逐行设置,直至当前section1属性设置完毕tableView:titleForHeaderInSection:section2是否有表头栏,之后同4-5,设置section2的属性.同理,设置完毕所有的section的相关属性tableView:cellForRowAtIndexPath:接下来设置的是每个section中每row添加的数据这样整个TableView就设置完毕了.6、如何设计一个可变高度(根据内容自适应高度)的UITableViewCell答:1)创建并添加一个UILabel作为单元格cell的子视图;2)在UITableView的委托方法:(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath中计算高度3)在UITableView的委托方法:(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath中计算UILabel的框大小。7、UIView的圆角属性设置方法答:利用setCornerRadius:8.UIVIiewController在现实过程中,各个方法的调用顺序init-viewDidLoad-viewDidAppear-viewDidUnload9.对于语句NSString*obj=[[NSDataalloc]init],obj在编译时和运行时分别是什么类型的对象?答:编译时为NSString类型,运行时为NSData类型。10.object-c中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码,方法又是什么?答:a、线程创建有三种方法:使用NSThread创建(detachNewThreadSelector:toTarget:withObject:)、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;b、在主线程执行代码,方法是performSelectorOnMainThread,c、如果想延时执行代码可以用performSelector:withObject:afterDelay:11.描述一下iOSSDKSDK中如何实现MVC的开发模式?答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等方法中实现数据和视图的交互。12、MVC设计模式是如何体现在iOSAppkai'fa开发中的?三者之间有哪些常见消息传递方式?答:iOS开发中使用了很好的分层设计,数据都可以放在自定义类型、NSArray及其子类型、NSDictionary及其子类型中,视图的显示都用UIView及其子类来实现,控制器在UIViewController的子类中实现,在控制器的ViewDidLoad、ViewWillAppear、ViewDidAppear、ViewDidDisappear、ViewWillDisappear等方法中实现数据和视图的交互。三者之间常见消息传递方式有:代理、通知中心、kvc/kvo等。13.关于自定义Cell中,图片下载用到的方法?如果有添加了第三方库SDWebImage/AFNetWorking,可以使用UIImageView的类别方法setImageWithURL:直接异步加载,如果没有的话可以使用NSURLConnection发起request请求,或者使用ASI将下载请求添加到下载队列中,将图片下载之后,在回调方法里,回调主线程,设置图片。14.UITableViewCell怎样使用更流畅?首先cell的复用机制节约了系统资源;其次应当注意有些复杂的大数据或网络数据应采用异步加载的方式进行加载,以免cell刷出时发生卡顿。15.在UIWebView上点击回复,如何使用UITextField进行回复?UIWebView有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。通过JAVAScript获取点击时间,弹出UITextField,输入字符串后,可以通过post请求发送回复。16.关于图文混排是如何排版的?图文混排应当以图片为起点,首先明确图片的位置,文字可以选择位于图片的下方,或者是环绕效果。环绕效果可以采用2个以上label或textView来实现;也可以通过AttributeString的属性设置,或者CoreText重绘UIVIew,添加文字的方式,修改文字间的间隔,达到让出图片的效果。如果图文显示在高度可变的视图中,如tableView的Cell中,可以计算文字占位Rect,动态修改视图或cell的高度。17.@property(nonatomic,retain)IBOutletUIView*view这个对象需要release吗,如果需要,如何做?其实XIB文件所生成的视图对象是无法真正释放的,因此关联XIB的属性也可以设置为assign属性,而视图不会释放。从这个角度上讲,这个对象不释放也可以,但是既然用retain做修饰符,出于尊重内存管理法则,理应进行释放,最简单的方式就是将视图在dealloc方法中设为nil,适用于非ARC,但ARC中这样写也没关系。18.两种传输协议在什么时候使用?所谓的两种传输协议,是指网络协议中的传输层协议,即TCP协议和UDP协议。TCP协议会在收发数据的两端建立稳定可靠,有序的链接,传输数据稳定可靠,但系统资源消耗较大,适合,数据或文件的下载或上传,Http网络协议就是采用TCP传输协议传输数据的。UDP是通俗讲得漂流瓶协议,发出协议的主机就像扔出漂流瓶的鲁滨逊一样,不再负责数据的跟踪和校验,优点是系统资源占用低,缺陷是没有在收发两端建立稳定的传输路线,数据有丢包,损坏或后发先至等缺陷,优秀的UDP传输服务器,会反复发送校验序列,以保证数据的正确。19.push推送机制iOS在系统级别有一个推送服务程序使用5223端口。使用这个端口的协议源于Jabber后来发展为XMPP,被用于Gtalk等IM软件中。所以,iOS的推送,可以不严谨的理解为:苹果服务器朝手机后台挂的一个IM服务程序发送的消息。然后,系统根据该IM消息识别告诉哪个Apps具体发生了什么事。然后,系统分别通知这些Apps。20.iOS播放音频的几种方法?iPhoneOS主要提供以下了几种播放音频的方法:SystemSoundServicesAVAudioPlayer类AudioQueueServicesOpenAL21.代理的作用代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。另外一点,代理可以理解为java中的回调监听机制的一种类似。22.intretVal=UIApplication(argc,argv,nil,nil):是什么意思对UIApplication对象进行了初始化,这个方法除了argc和argv参数外,另外这个函数还有2个两个字符串参数来识别UIApplication类和UIApplication代理类,在这里默认是2个nil,第一个参数为nil就默认把UIApplication类作为缺省值进行初始化,可以在这里不填nil而是使用自己定义的UIApplication子类。至于第二个参数nil就设置为nil就把模板生成的HelloWorldAppdelegate类作为默认值。23.保存一个变量到本地,列举两个简单的方法1,用NSUserDefaults存储小量数据2,直接writeTofFile3,存数据库4,归档24.如果UIView*view已经实例化,在view仅添加了n个UIButton类的实例,这些button不是全局的,并且button已经用tag区分开,如何快速找出指定的一个button改变他的属性?button=(UIButton*)[viewviewWithTag:tag]25.当A类中的某个方法执行到某处时,这时想在B类中执行某个方法,如何做?并做简单说明用代理执行代理方法说明:在b类中实现协议方法,设置a的代理为b,在指定方法内调用代理的协议方法26.oc中加号方法与减号方法的区别加号方法是类方法,用类名直接调用减号方法为实例方法,需要创建一个实例对象调用27.建一个工程用到的最基本的两个框架是?FoundationUIKit28,一个UITableview的实例,重新加载数据的方法是什么?reloadData刷新整个表格和reloadSections:withRowAnimation刷新一组数据29.XML有哪几种解析方式,他们各有什么优点答:有Sax和Dom两种解析方式,sax是逐行解析。dom是一次性全部加载xml文件,然后解析29.iOS平台怎么做数据持久化有以下方式做1、NSUserDefaults2、Plist3、数据库4、文件保存5、归档与反归档30.intretVal=UIApplication(