常见面试题
2017-04-12 本文已影响27人
挨踢的苹果
- 在定义属性的时候,assign和strong分别在什么情况下使用
assign:修饰简单数据类型,比如int,float等,如果基本数据类型用retain修饰,编译器会报错
可以参看 http://www.jianshu.com/p/4a1d1921284b
strong:修饰对象,与retain同义,在引用对象的时候,会retain - 写一个单例,并结合实际谈一谈单例的作用
static Singleton* _instance = nil;
+(instancetype) shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init] ;
}) ;
return _instance ;
}
很多时候,我们在整个app生命周期中要用到全局对象,以协调系统整体的行为,比如,整个系统可能有很多地方会修改、保存以及获取用户信息,这时就可以用单例模式
- ++i和i++的区别
int a = 1, b;
b = a++;
// b == 1 加号在后,就赋值后运算
int c = 1, d;
d = ++c;
// d == 2 加号在前,就赋值前运算
- #import<>和#import""的却别,import和include的区别
<>用于系统文件,""用于自己创建的文件;
import是include的改良版,会确保文件只引用一次 - A界面跳转到B,B跳转到C,C跳转到D,如何跳回B?
NSArray *array = self.navigationController.viewControllers;
int i;
for (i=0; i<array.count; i++) {
UIViewController *vc = array[i];
if ([vc isKindOfClass:[B class]]) {
return;
}
}
B *b = array[i];
[self.navigationController popToViewController:b animated:YES];
- frame和bounds的区别
bounds的x和y永远是0,frame不一定。因为frame描述的是在父视图中的位置,bounds描述的是相对于自己的位置 - UITableView加载数据没有显示,以你的经验来看为什么?
可能是数据源不对,可能是代理没写对,可能是cell有问题 - 写出经常用的多线程的代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 费时操作
dispatch_async(dispatch_get_main_queue(), ^{
// 刷新UI
});
});
- 如果从后台数据解析出来数据为空值,要如何避免空值造成的崩溃?
从后台获取的数据一般会解析到写好的model里边,将服务器数据转化成model的时候,就可以进行防灾处理,一般会将空value替换成默认字符串或者指定类型的数据。如果整个数据都是空的,直接则直接使用默认model,提示用户即可。 - 说说iOS开发当中常遇到的崩溃以及如何避免。
永远不要相信服务器,除了养成良好的编码习惯、风格,及时发现隐患外,还要做好防灾处理。Foundation框架里有很多常用的方法有导致崩溃的潜在危险,我们可以将这些方法替换、拦截,以防止崩溃发生,比如:
- 通过category给类添加方法用来替换掉原本存在潜在崩溃的方法
- 利用runtime方法交换技术,将系统方法替换成我们给类添加的新方法
- 利用异常的捕获来防止程序的崩溃,并且进行相应的处理
- OC的特点
- Object-c仅支持单一父类继承,不支持多重继承
- 所有对象都是指针的形式
- Category (分类),功能强大,不用通过继承,直接给库类提供函数或者修改库类中的函数
- 没有命名空间(缺点)
- 消息机制 在Objective-C中,你可以对id发送任何消息(id很像void*,但是被严格限制只能使用在对象上),编译器仅会发出“该对象可能无法回应消息”的警告,程序可以通过编译,而实际发生的事则取决于运行期该对象的真正形态,若该对象的确可以回应消息,则依旧运行对应的方法。一个对象收到消息之后,他有三种处理消息的可能手段,第一是回应该消息并运行方法,若无法回应,则可以转发消息给其他对象,若以上两者均无,就要处理无法回应而抛出的例外。只要进行三者之其一,该消息就算完成任务而被丢弃。若对“nil”(空对象指针)发送消息,该消息通常会被忽略,取决于编译器选项可能会抛出例外。
- 内存管理与优化
- 沙盒:
Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除;iTunes在与iPhone同步时,备份所有的Documents和Library文件;iPhone在重启时,会丢弃所有的tmp文件。 - Block
Block