首页 > 代码库 > IOS 面试题
IOS 面试题
1.NSNotification和KVO的区别和用法是什么 ?什么时候该使用通知,什么时候该使用KVO,它们在实现上有什么区别?如果用delegate 和protocol来实现类似的功能可能吗?如果可能会有什么潜在的问题?如果不能为什么 ?KVO只能监测属性的变化,但是实现了自动监测,当属性值变化时,会自动通知观察者NSNotification比较灵活,可以监测的内容较多,但是需要被观察者手动发送通知,观察者才能响应。protocol通过添加一个NSArray也能实现类似的功能,但是实现上需要自己处理delegate的添加与删除,自己在属性变化时手动通知,较繁琐,易出错。2.main文件中UIApplicationMain有几个参数,作用是什么UIApplicationMain它接受4个参数。 其中argc和argv两个参数来自于main()接受的两个参数;另外两个String型参数分别表示程序的主要类(principal class)和代理类(delegate class)。如果主要类(principal class)为nil,则默认为UIApplication UIApplicationMain会根据principalClassName创建UIApplication对象,然后根据delegateClassName创建一个delegate对象3. 什么时候使用NSMutableArray,什么时候使用NSArray?当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray。需要指出的是,使用NSArray只表明的是该数组在运行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。NSArray是线程安全的,NSMutableArray不是线程安全的,多线程使用到NSMutableArray需要注意。4. nil和Nil有什么区别 nil表示一个Objctive-C对象,这个对象的指针指向空。Nil定义一个指向空的类(是Class,而不是对象)5. 谈谈对MVC的理解简单的理解: V对M是不能通讯的。 C对M通讯:API M对C通讯:Notification,KVO C对V通讯:Outlet V对C通讯:Target-action, Delegate,Datasource5. NSInteger与int有何不同#if __LP64__ || NS_BUILD_32_LIKE_64typedef long NSInteger;typedef unsigned long NSUInteger;#elsetypedef int NSInteger;typedef unsigned int NSUInteger;#endif6. id 声明的对象有什么特性?Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;7. Objective-C内存管理的方式。你了解几种Objective-C的内存管理主要有三种方式ARC、手动内存计数、自动释放池(autoreleasepool)8.如何测试App的性能Porfile-> Activity monitor9. 如何检测App内存泄露Porfile->Leaks10.如何过滤数组// 数据源NSArray *dataArr = [NSArray arrayWithObjects:@"a1", @"abc1", @"abc4", @"abc2", nil];// 过滤对象NSArray *filterArr = [NSArray arrayWithObjects:@"abc1", @"abc2", nil];// 过滤器NSPredicate *thePredicate = [NSPredicate predicateWithFormat:@"NOT (SELF in %@)", filterArr];// 过滤后的新数组NSArray *resultArr = [[NSArray alloc]initWithArray:[dataArr filteredArrayUsingPredicate:thePredicate]];NSLog(@"过滤后的结果:%@",resultArr);11. UITableView继承那个类?UIScrollView继承那个类?UIView继承那个类?UITableView 继承 UIScrollViewUIScrollView 继承 UIViewUIView 继承 UIResponder12. UIView和UIWindw的关系?UIWindow的作用UIWindow 继承UIView。作用:1.UIWindow作为一个容器,放所有的UIView2.将事件(例如:点击事件、拖拉事件等)分发给 view。14. 浅复制和深复制的区别?浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。15. 响应者链是什么?事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者是个视图或控件,并且首先对事件进行响应,如果第一响应者不处理该事件,事件就会被传递给它的视图控制器,如果此视图控制器不处理该事件,则将事件传递给父视图,如果父视图没有响应,则该事件转到父视图控制器,以此类推,直到顶层视图。接下来会沿着顶层视图到窗口(UIWindow对象)再到程序(UIApplication对象)。如果UIApplication不响应该事件,该事件逐渐进入睡眠状态。
IOS 面试题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。