• 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,Datasource
    
    5.  NSInteger与int有何不同
    #if __LP64__ || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
    #else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
    #endif
    
    6. id 声明的对象有什么特性?
    Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;
    
    7. Objective-C内存管理的方式。你了解几种
    Objective-C的内存管理主要有三种方式ARC、手动内存计数、自动释放池(autoreleasepool)
    
    8.如何测试App的性能
    Porfile-> Activity monitor
    
    9. 如何检测App内存泄露
    Porfile->Leaks
    
    10.如何过滤数组
    // 数据源
    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 继承 UIScrollView
    UIScrollView 继承 UIView
    UIView 继承 UIResponder
    
    12. UIView和UIWindw的关系?UIWindow的作用
    UIWindow 继承UIView。
    作用:
    1.UIWindow作为一个容器,放所有的UIView
    2.将事件(例如:点击事件、拖拉事件等)分发给 view。
    
    14. 浅复制和深复制的区别?
    浅层复制:只复制指向对象的指针,而不复制引用对象本身。
    深层复制:复制引用对象本身。
    
    15. 响应者链是什么?
    事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者是个视图或控件,并且首先对事件进行响应,如果第一响应者不处理该事件,事件就会被传递给它的视图控制器,如果此视图控制器不处理该事件,则将事件传递给父视图,如果父视图没有响应,则该事件转到父视图控制器,以此类推,直到顶层视图。接下来会沿着顶层视图到窗口(UIWindow对象)再到程序(UIApplication对象)。如果UIApplication不响应该事件,该事件逐渐进入睡眠状态。

    16.
    [[UIScreen mainScreen] bounds]和applicationFrame的区别
    bounds就是屏幕的全部区域,applicationFrame就是app显示的区域,不包含状态栏

    17.何时用Delegate和何时用Block?
    公共接口,方法较多也选择用delegate ,异步和简单的回调用block更好

    18.在一个对象的方法里面:self.name = “object”;和name =”object”有什么不同吗?
    self.name = “object”会调用对象的setName()方法,
    name = “object”会直接把object赋值给当前对象的name 属性。
    并且 self.name 这样retainCount会加1,而name就不会。
  • 相关阅读:
    CF580B Kefa and Company 尺取法
    [USACO08OCT]牧场散步Pasture Walking BZOJ1602 LCA
    [USACO09FEB]改造路Revamping Trails 分层最短路 Dijkstra BZOJ 1579
    [USACO09OPEN]牛的数字游戏Cow Digit Game 博弈
    Codeforces 628F 最大流转最小割
    Codeforces 513D2 Constrained Tree
    Codeforces 1009G Allowed Letters 最大流转最小割 sosdp
    Codeforces 431E Chemistry Experiment 线段树 + 二分
    Codeforces 359E Neatness
    Codeforces 1045B Space Isaac
  • 原文地址:https://www.cnblogs.com/joesen/p/4192918.html
Copyright © 2020-2023  润新知