TOP

iOS面试题(二)
2019-09-03 02:40:13 】 浏览:261次 本网站的内容取自网络,仅供学习参考之用,绝无侵犯任何人知识产权之意。如有侵犯请您及时与本人取得联系,万分感谢。
Tags:iOS 试题

py,nonatomic各是什么作用,在哪种情况下用?

readwrite是可读可写特性,需要生成getter方法和setter方法。

readonly是只读特性,只会生成getter方法,不希望属性在类外改变。

assign是赋值特性,setter方法将传入参数赋值给实例变量。

retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1。

copy表示赋值特性,setter方法将传入对象复制一份,需要完全一份新的变量。

nonatomic非原子操作,决定编译器生成的setter,getter是否是原子操作。

atomic表示多线程安全,一般使用nonatomic。

 

25.类变量的@protected,@private,@public,@package声明各有什么含义?

 

26.id声明的对象有什么特性?

id声明的对象具有运行时的特性,即可以指向任意类型的obc的对象。

 

27.MVC?特性?为什么被广泛运用?

MVC设计模式包括:Model,View,Controller。相互之间的链接使之更加面向对象。

 

28.对于语句NSString *str =[ [NSData alloc] init];str在编译和运行时分别是什么类型的对象?

编译是NSString,运行是NSData。

 

29.for(int index = 0; index < 20; index++ ){

NSString *str = @“temp”;

NSLog(temp);

NSNumber *num = [NSNumber numberWithInt:2];

NSLog(num);

}

这段代码有什么问题?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内还是循环外好?为什么?

 

30.内存管理的几条原则是什么?按照默认法则,那些关键字生成的对象需要手动释放?在和prpperty结合的时候怎样有效的避免内存泄露?

谁申请,谁释放。遵循Cocoa Touch的使用原则;

内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,要细心。

关键字alloc 或new 生成的对象需要手动释放;

设置正确的property属性,对于retain需要在合适的地方释放,

31.在一个对象释放前,如果他被加到了notificationCenter中,不在notificationCenter中remove这个对象可能会出现什么问题?

 

32.怎样实现一个singleton的类,给出思路。

 

33.什么是序列化或者Acrchiving,可以用来做什么,怎样与copy结合,原理是什么?

 

34.线程与进程的区别和联系?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程不用进程。

 

35.runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的timer事件,touch事件等。

 

36.iOS平台怎么做数据的持久化?CoreData和SQLite有无必然联系?CoreData是一个关系型数据库吗?

iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3和CoreData;CoreData可以是你以图形界面的方式快速的定义App的数据模型,同时在你的代码中容易获取到它。CoreData提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做。允许你再App中继续创建新的任务。在使用CoreData的时候,你不用安装额外的数据库系统,因为CoreData使用内置的SQLite数据库。CoreData将你的App的模型层放入到一组定义在内存中的数据对象,CoreData会追踪这些对象的改变,同时可以根据需要做出相反的改变,例如用户执行撤销命令。当CoreData在对你App数据的改变进行保存的时候,CoreData会把这些数据归档,并永久性保存。Mac OS X中SQLite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,SQLite是一个轻量级的嵌入式数据库编程。与CoreData框架不同的时,SQLite是使用程序式的,SQL的只要的API来直接操作数据表。CoreData不是一个关系型数据库,也不是关系型数据库管理系统。虽然CoreData支持SQLite作为一个存储类型,但它不能使用任意的SQLite数据库。CoreData在使用的过程中自己创建这个数据库。CoreData支持对一,对多的关系。

 

37.阐述一个nil对象从interface builder产生,到载入程序运行空间,最后被释放时所经历的生命周期。

 

38.UNIX上进程怎么通信?

UNIX主要支持三种通信方式:

1).基本通信:主要用来协调进程间的同步和互斥

(1)锁文件通信

通信的双方通过查找特性目录下特定类型的文件(称锁文件)来完成进程间对临界资源访问时的互斥;例如进程p1访问一个临界资源,首先查看是否有一个特性类型文件,若有则等待一段时间再查找锁文件。

(2)记录锁文件

2).管道通信:适应大批量的数据传递

3).IPC:适应大批量的数据传递

 

38.Timer的间隔周期准吗?怎样实现一个精准的Timer?

 

39.UIScrollView用到了什么设计模式?还能在foundation库中找到类似的吗?

 

40.如果要开发一个类似eclipse的软件,支持插件结构。且开放给第三方开发。你会怎么设计?

 

41.main()

{

int a[5] = {1,2,3,4,5};

int *ptr = (int *)(&a + 1);

printf(“%d,%d”,*(a + 1),*(ptr - 1));

}

2-5

*(a + 1)= a[1];  *(ptr - 1) = a[4]; 

&a是数组指针,其类型为int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。a是长度为5的int数组指针,所以要加5*sizeof(int)所以实际是a[5],但是prt与(&a + 1)类型是不一样的,所以prt - 1只会减去sizeof(int*),a,&a的地址是一样的,但意思不一样,a是数组首地址,也是a[0]的地址,&a是对象

请关注公众号获取更多资料


iOS面试题(二) https://www.cppentry.com/bencandy.php?fid=99&id=246396

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇git找回丢失的代码 下一篇iOS Push详述,了解一下?

评论

验 证 码:
表  情:
内  容: