面试题2

来源:互联网 发布:linux服务器禁止ping 编辑:程序博客网 时间:2024/06/13 21:39

8.瀑布流是怎么理解和实现的

 1.如果简单来说,用3个tableview就可以实现瀑布流,3个tableview实现联动滚动。

 2.其实最好的做法是在scrollview上使用3个复用队列,如果一种一个cell超过屏幕,不能release,而是把它回收到复用队列中,如果要创建一个cell,首先从复用队列中取一个,然后使用。

9.你如何利用复用机制

一般是对uiscrollview做复用机制,因为uiscrollview滚动窗口没有复用,所以要做,原理就是超过屏幕的view不能销毁,而要放在复用队列/池里面存放起来,然后以后要在scrollview显示view,首先不要alloc创建,而要首先去复用池里面找有没有可复用的view,如果没有就alloc,如果有就直接用。

10、类别的作用

类别是给已有的类添加方法,但是不能添加变量,匿名类别除外

11、类别和继承有什么区别

类别/类目/Category很方便给现有的类添加方法。但是不能添加成员变量,匿名类别除外,比如可以个NSString增加方法,给UINavigationBar增加方法,比如SDWebImage给UIImageView增加了setImageWithURL:方法。类别对于使用者很方便。

继承可以给现有的类增加方法和成员变量。继承对于使用者来说不如类别方便,比如对SDWebImage如果用继承的话,那么就需要写一个类似于QFImageView,然后把所有的UIImageView改写成QFImageView,这里不如类别方便。

12、C和OC有哪些基本数据类型

C :char ,short ,int ,struct ,union ,enum

OC: NSString NSArray,NSDictionary

13、解释多线程】NSThread ,NSOperation,GCD

多线程在iOS中用的很多,比如每个asi请求,SDWebImage请求,数据请求等待网络数据处理,多线程/异步就是主要是为了界面流畅,防止界面假死。

每一个asi请求就是一个NSOperation

每一个NSUrlConnection也是一个线程

NSThread是创建线程的一个通用的类。比如线程创建,取消,开始等

NSoperation就是一个简单的以任务为导向的多线程模型。目的是为了不懂操作系统,不懂线程的人使用的。

GCD类似于NSOperation,是一个blocks版本的线程模型。

14、什么是异步

相对于同步来说,单独起一个或者多个线程去处理

异步是一个概念,线程还是一个技术,异步就是用线程这种技术实现的。

比如界面下载数据,我们启动一个异步任务ASI去网络下载数据,

然后异步刷新界面,我们无需等待网络数据下载完成。

15、代理和协议有什么区别

代理是一种概念,协议是一种技术,代理是用协议来实现的,代理是两个对象间通讯的一种方式。

代理主要做反向传值的。实现系统的一些回调方法,比如scrollview滑动事件,选择照片,asi网络下载完成等。

16、代理和通知中心/广播/NotificationCenter有什么区别

代理主要是反向传值,一般用来1:1的两个对象通讯上。

通知中心是通过注册然后接受事件的一种N:N(多对多)的方法

17、UITextField、UITextView的区别

UITextField不能换行,UITextView可以换行。TextView可以点击字体放大,可以复制。相同的是他们都有代理。

18、怎么解析html源码

一般html是通过webview来显示的。一般简单的html是通过解析字符串来解析。没有成熟的html解析器

一般服务器去抓取html   解析html 形成 json xml文件供手机端读取

19.Objective-C如何和javascript通讯

Objective-c ---->javascript --- >html里面的内容

Objective-c 是通过stringByEvaluatingJavaScriptFromString函数来执行html中的javascript

javascript --->url ---->objective-c本地方法

需要通过UIWebView中的代理函数

- (BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType;

20、如何调用iOS打电话,发短信

[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”tel://1543434”]];[[UIApplication sharedApplication] openURL:[NSURL urlwithString:@”sms://1572234”]];[[UIApplication sharedApplication] openURL:[NSURLurlwithString:@”mail://hello@hello.com”]];

[[UIApplication sharedApplication] openURL:[NSURLurlwithString:@”http://1000phone.net”]];


21、下拉刷新需要实现哪几个方法,刷新流程

下拉一般使用EGORefresh进行。原理是利用scrollview的反弹效果把刷新view加在scrollview的负坐标上。通过代理方法触发。


22、解释const,static,inline关键字

const修饰指针,或者常量,比如不可变

static修饰变量表示作用域,比如全局的私有变量,函数内部的static是内部的私有变量

static修饰函数表示函数是文件作用域

Inline表示内联。一般来说inline需要和static联合用

一般用法是static inline int max (int a,int b){

         return a>b?a:b;

}

static inline作用是和宏类似,只不过是方便调试(宏不能断点调试,static inline可以)。运行时候是一样的。

一般c/c++短小的函数都用static inline内联函数


0 0
原创粉丝点击