iOS 面试总结 一

iOS 开发工程师之面试总结一

很久没有出去面试了,大概一年的时间都很稳定,最近出去面试感受内心特别慌,没有了当时的勇气了,其实仍是感受本身的准备不是特别的充分,这是主要缘由。

这段时间待得太安逸没了紧张感,最近一段时间感受本身要和日新月异的新技术脱节了,好多以前学过的东西也生疏了,决定好好总结一下本身和写下最近面试的经验。

1.Object-C 是如何实现内存管理的? 经常使用的内存管理语句有哪些?html

Object-C 中的内存管理也就是引用计数机制。
手动引用计数(MRC),当建立一个对象的时候系统会为这个对象的引用计数置为1,retain方法会使对象的引用计数加1,release方法会使对象的的引用计数减1,当引用计数为0时, 调用dealloc方法去销毁对象。ios

自动引用计数(ARC),自动引用计数的实质仍是经过引用计数机制去管理的,只不够不用咱们程序员去手动管理,系统会在程序编译时自动在合适的地方添加retain、release、autorelease 方法去控制引用计数的平衡。
内存管理的经常使用语句有 alloc 、retain 、release 、dealloc 、autorelease 。程序员

顺便提一下 内存管理严格遵循四条规则?
一、由本身生成的对象,本身持有
二、非本身生成的对象,本身也能持有
三、再也不须要本身持有的对象时释放
四、非本身持有的对象没法释放面试

2.浅拷贝和深拷贝的区别? 写一段深拷贝的代码。sql

浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间.设计模式

深拷贝就是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束以后,两个对象虽然存的值是相同的,可是内存地址不同,两个对象也互不影响,互不干涉。性能优化

void testMutable()
{
//可变对象的复制,copy和mutableCopy都是深拷贝
NSMutableString *str1 = [NSMutableString stringWithString:@"test"];
NSMutableString *str2 = [str1 copy];
//copy返回的是不可变对象,所以str2不能改变,会发生崩溃
//[str2 appendString:@"test"];
NSMutableString *str3 = [str1 mutableCopy];
[str3 appendString:@"test"];
NSLog(@"%@ %@ %@",str1,str2,str3);
NSLog(@"%p %p %p",str1,str2,str3);
}

3.下面一点错误百出的程序,指出它有什么问题。网络

typedef void(^MyBlock)(NSString *str);

@interface ViewController

@property(weak) MyBlock block;
@property(nonatomic,strong) NSString *currentText;

@end
---------------------------
@implementation ViewController

-(void)method{
    NSString *text =@"123";
    self.block = ^(NSString *str){
        self.currentText = str;
        text = str; 
    };
}
@end

---------更正的代码以下--------
typedef void(^MyBlock)(NSString *str);

@interface ViewController:NSObject

@property(copy) MyBlock block;
@property(nonatomic,copy) NSString *currentText;

@end
---------------------------
@implementation ViewController

-(void)method{
    __block NSString *text =@"123";
    __weak typeof(self) weakSelf = self;
    self.block = ^(NSString *str){
        weakSelf.currentText = str;
        text = str; 
    };
}
@end

4.从名为 'employee' 的 sqlite 表中查找 'name' 属性以 'Jo' 开头的从符合结构的第100条开始10条记录,按 'updatedAt' 倒序。多线程

这个先不写了,我要好好看一下在贴出来。
哈哈哈

5.iOS 中经常使用的设计模式有哪些? Notification 和 Delegate 使用区别。并发

MVC 、MVVM 、代理 、block 、KVC 、KVO 。
Notification 和 Delegate 均可以用来传递消息。
Delegate 是一对一的,两者要创建相互关联。
Notification 是一对一 或 一对多的,两者不须要作相互关联。
Delegate 的效率要比 Notification 高。

6.tableView 的DateSource 协议有哪些方法必需要实现,怎么进行性能优化?

(1)numberOfSectionsInTableView: //可写可不写(当一个分区的时可不写)
(2)tableView:numberOfRowsInSecion:
(3)tableView:cellForRowAtIndexPath:
优化问题:
(1):网络请求成功后进入后台进行布局计算并返回高度缓冲备用。
(2):当cell的subview较多时尤为是图片的时候建议用其drawRect:中自行绘制。
(3):透明的问题,将UI元素的透明度设置成不透明的。

7.iOS 中的多线程实现有哪些,对你了解最深刻的说说你的理解。

一、NSThread
二、NSOperation
三、Grand Central Dispatch (GCD)

一、使用线程能够把程序中占据时间长的任务放到后台去处理,如图片、视频的下载。 二、发挥多核处理器的优点,并发执行让系统运行的更快、更流畅,用户体验更好。 三、能适当提升执行效率,提升资源利用率。 四、建立线程是有开销的,大量开启的话,会下降性能;程序设计也会更复杂,好比线程之间的通讯,多线程的数据共享。 5.GCD会自动管理线程的生命周期(建立线程,调度任务,销毁线程),不须要咱们编写任何管理线程的代码。 6.http://blog.sina.com.cn/s/blog_99c943d00102wphm.html

相关文章
相关标签/搜索