打造最受名企欢迎的iOS程序员

本文详细探讨了iOS开发中的关键概念,包括堆栈的区别、数组与链表、delegate与notification的使用场景、MVC设计模式、多线程、内存管理等。此外,还涉及UITableView的绑定、UIViewController的生命周期、数据持久化和性能测试策略,旨在帮助iOS程序员提升技能,以应对名企面试挑战。
摘要由CSDN通过智能技术生成

打造最受名企欢迎的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 =[NSArray arrayWithObjects: @"1",@"2",@"1",@"7",@"4",@"5",@"2", @"6",@"5",nil]; 
NSMutableArray *arrmu = [[NSMutableArray alloc]init];
// 过滤 
NSMutableArray *sameArray = [[NSMutableArray alloc]init];
//找出相同的 
for (int i = 0 ; i < [arr count]; i++) { 
    id str = [arr objectAtIndex:i];
    if ([arrmu count] == 0) {
        [arrmu addObject: str]; 
    } else { 
        BOOL flag = NO; 
        for (int j = 0; j < [arrmu count]; j++ ) { 
            if ([stris Equal:[arrmu objectAtIndex: j]]) {
                [sameArray addObject: str]; 
                flag =YES;
                break; 
            } else { 
               flag =NO;
            }
         }
        if (flag == NO) {
            [ arrmuaddObject:str];
        } 
   } 
} 
NSLog(@"sameArray : %@",sameArray); 

还有两种直接找出的方法,上代码: 一:

NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"1",nil]; 
NSSet *set = [NSSet setWithArray: arr]; 
NSLog(@"%@",[setallObjects]); 

二:

NSArray *arr =@[@1,@2,@1];   
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
for (NSNumber *numberin arr) { 
    [dict setObject: number forKey: number]; 
} 
NSLog(@"%@",[dict allValues]); 
6、UITableView能否绑定多个数据源?

答:不能

7、一个UIViewController能否管理多个UITableView ?

答:可以

8.说一下响应链的响应机制
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 视图已在屏幕上渲染完 成。 // 视图将被从屏幕上移除的顺序
  • 7、viewWillDisappear 视图将被从屏幕上移 除之前执行。
  • 8、viewDidDisappear 视图已经被从屏幕上 移除。
  • 9、dealloc 视图被销毁,此 时需要在init和viewDidLoad中创建的对象进行释放。
  • 10、viewDidUnload 出现内存警告在内 存不足时执行,并对所有非当前显示的controller执行。 本视图的所有子视图将被销毁,以释放内存,此时开发者需 要手动对viewLoad、viewDidLoad中创建的对象释放内存。 因为当这个视图再次显示在屏幕上的时候,viewLoad、 viewDidLoad 再次被调用,以便再次构造视图
12、Autorerelease对象什么时候释放?

答:autorelease实际上只是把对release的调用延迟了,对于每 一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。

13、iOS数据持久化方式

答:四种:属性列表、对象归档、SQLite3和Core Data

14、Object-c的类可以多重继承么?可以实现多个接口么? Category是什么?重写一个类的方式用继承好还是分类好?为什 么?

答:Object-c的类不可以多重继承;可以实现多个接口,通过 实现多个接口可以完成C++的多重继承;Category是类别,一般情况 用分类好,用Category去重写类的方法,仅对本Category有效,不会 影响到其他类与原有类的关系。

15. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

答:#import是Objective-C导入头文件的关键字,#include是 C/C++导入头文件的关键字,使 用#import头文件会自动只导入一次, 不会重复导入,相当于#include和#pragma once;@class告诉编译器 某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件 的相互包含;#import<>用来包含系 统的头文件,#import””用来 包含用户头文件。

16.属性readwrite,readonly,assign,retain,copy,nonatomic 各 是什么作用,在那种情况下用?

答:readwrite 是可读可写特性;需要生成getter方法和setter 方法时 readonly 是只读特性 只会生成getter方法 不会生成setter方 法 ;不希望属性在类外改变 assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设 置变量时; retain 表示持有特性,setter方法将传入参数先保留,再赋值,传 入参数的retaincount会+1; copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一 份新的变量时。 nonatomic 非原子操作,决定编译器生成的setter getter是否 是原子操作,atomic表示多线程安全,一般使用nonatomic

17.常见的object-c的数据类型有那些, 和C的基本数据类型有什么 区别?如:NSInteger和int

答:object-c的数据类型有 NSString,NSNumber,NSArray, NSMutableArray,NSData等等,这些都是class,创建后便是对象, 而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数 值;而object-c的NSNumber包含有父类NSObject的方法和 NSNumber 自己的方法,可以完成复杂的操作。

18.Objective-C如何对内存管理的,说说你的看法和解决方法?

答:Objective-C的内存管理主要有三种方式ARC(自动内存计数)、 手动内存计数、内存池。 解决方法的话: 谁持有,谁释放。

19.如何对iOS设备进行性能测试?

答:Profile-> Instruments ->Time Profiler

20.Object C中创建线程的方法是什么?如果在主线程中执行代码, 方法是什么?如果想延时执行代码、方法又是什么?

答:线程创建有三种方法:使用NSThread创建、使用 GCD的 dispatch、使用子类化的NSOperation,然后将其加入 NSOperationQueue;在主线程执行代码,方法是 performSelectorOnMainThread,如果想延时执行代码可以用 performSelector:onThread:withObject:waitUntilDone:


更多内容
打造最受名企欢迎的iOS程序员(上).pdf
打造最受名企欢迎的iOS程序员(下).pdf
共104道面试题

如需要更多学习材料百度网盘链接地址,请到微信小程序搜索“斌雅资料”,序号:12,密钥:3322,查询资料获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值