IOS学习笔记48--一些常见的IOS知识点+面试题
1、堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
2、数组和链表什么区别?
答:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。
链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。
3、delegate和notification什么区别,什么情况使用?
答:Delegate:
消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然然后发送者响应事件,
delegate机制使得接收者可以改变发送者的行为。
通常发送者和接收者的关系是直接的一对多的关系。
Notification:
消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。
通常发送者和接收者的关系是间接的多对多关系。
4、什么是MVC,为什么使用MVC,有什么好处?
答: 分别为: 模型(Model),视图(View)和控制Controller)。
模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
“模型”有对数据直接访问的权力,例如对数据库的访问。
视图(View) 视图层能够实现数据有目的显示。
控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。
5、从一个数组中找出重复的元素打印出来
NSArray *arr = [NSArrayarrayWithObjects:@"1",@"2",@"1",@"7",@"4",@"5",@"2",@"6",@"5",nil];
NSMutableArray *arrmu = [[NSMutableArrayalloc]init];//过滤
NSMutableArray *sameArray = [[NSMutableArrayalloc]init];//找出相同的
for (int i = 0 ; i < [arrcount]; i++) {
id str = [arr objectAtIndex:i];
if ([arrmu count] == 0)
{
[arrmuaddObject:str];
}
else{
BOOL flag = NO;
for (int j = 0; j < [arrmucount]; j++ ) {
if ([strisEqual:[arrmu objectAtIndex:j]])
{
[sameArrayaddObject:str];
flag =YES;
break;
}
else{
flag =NO;
}
}
if (flag == NO) {
[ arrmuaddObject:str];
}
}
}
NSLog(@"sameArray : %@",sameArray);
还有两种直接找出的方法,上代码:
一:
NSArray *arr = [NSArrayarrayWithObjects:@"1",@"2",@"1",nil];
NSSet *set = [NSSetsetWithArray:arr];
NSLog(@"%@",[setallObjects]);
二:
NSArray *arr =@[@1,@2,@1];
NSMutableDictionary *dict = [NSMutableDictionarydictionary];
for (NSNumber *numberin arr) {
[dictsetObject:numberforKey:number];
}
NSLog(@"%@",[dictallValues]);
6、UITableView能否绑定多个数据源?
答:不能
7、一个UIViewController能否管理多个UITableView ?
答:可以
8、ios4、5、6相对于之前的版本添加了哪些新特性?
这个就比较多了,比如:抛弃谷歌地图 新推Maps应用 ,大幅加强中国本地化支持,Siri开口讲普通话,通过iCloud体验分享乐趣,Passbook电子票券管理,随时随地的FaceTime,电话功能增强,Safari支持全屏浏览,Mail应用新增VIP,万能辅助:更强大等等了
9、同步请求和异步请求什么区别?
答:发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。
10、iOS中的多线程操作、多线程方式
答:iOS提供了方便的多线程调用机制:NSOperation和NSOperationQueue。它的使用方法也很简单,
一般都是将NSOperation对象加入到NSOperationQueue队列中,加入后队列就开始处理,知道任务操作完成。
11、UIViewController的生命周期
答:当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
// 视图显示在屏幕上的顺序
1、 alloc 创建对象,分配空间。
2、init (initWithNibName) 初始化对象,初始化数据。
3、loadView 从nib载入视图, 这一步不需要去干涉。除非没有使用xib文件创建视图。
4、viewDidLoad 加载完毕,可以进行自定义数据以及动态创建其他控件。
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图即将显示在屏幕上。
6、viewDidAppear 视图已在屏幕上渲染完成。
// 视图将被从屏幕上移除的顺序
1、viewWillDisappear 视图将被从屏幕上移除之前执行。
2、viewDidDisappear 视图已经被从屏幕上移除。
3、dealloc 视图被销毁,此时需要在init和viewDidLoad中创建的对象进行释放。
4、viewDidUnload &nb
补充:移动开发 , IOS ,
- 更多wap疑问解答:
- 新人求助QPainter
- 为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
- qt 4.7 sqlserver2000 存储过程调用
- 关于ANDROID4.0.1编译问题!
- Android FrameBuffer读屏幕30秒后mmap失败
- 联通粗定位用java程序如何来请求和接受数据
- 为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
- android与PC蓝牙通讯
- 指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
- Android调试
- android如何通过wifi连接无线打印机
- 运行程序,release目录下产生一个乱码文件夹
- 分享个某机构最新安卓资料,自己验证了
- service启动不起来,掉不了service connection
- 求助:QT5.0 没有QPrinter吗