• IOS面试题object-c 61-70


    61. 阐述isKindOfClass、isMemberOfClass、selector作用分别是什么?
    isKindOfClass:作用是某个对象属于某个类型或者继承自某类型
    isMemberOfClass:某个对象确切属于某个类型
    selector:通过方法名获取在内存中的函数入口地址
    🚀🚀🚀🚀🚀🚀
    62. _objc_msgForward 函数是做什么的,直接调用它将会发生什么?
    _objc_msgForward是 IMP 类型,用于消息转发的:当向一个对象发送一条消息,但它并没有实现的时候,_objc_msgForward会尝试做消息转发
    🚀🚀🚀🚀🚀🚀
    63. OC中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?
    // 创建线程的方法
    - [NSThread detachNewThreadSelector:nil toTarget:nil withObject:nil]
    - [self performSelectorInBackground:nil withObject:nil];
    - [[NSThread alloc] initWithTarget:nil selector:nil object:nil];
    - dispatch_async(dispatch_get_global_queue(0, 0), ^{});
    - [[NSOperationQueue new] addOperation:nil];
    // 主线程中执行代码的方法
    - [self performSelectorOnMainThread:nil withObject:nil waitUntilDone:YES];
    - dispatch_async(dispatch_get_main_queue(), ^{});
    - [[NSOperationQueue mainQueue] addOperation:nil];
    🚀🚀🚀🚀🚀🚀
    64. Object-C 中的协议和java中的接口概念有何不同?
    OC中的代理有2层含义,官方定义为 formalinformal protocol。前者和Java接口一样。
    informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。
    其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。
    这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。
    这么看,总觉得类别这玩意儿有点像协议的可选协议。”现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“,
    现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。
    🚀🚀🚀🚀🚀🚀
    65. 阐述 NSOperation Queue?

    1.概述:
    NSOperationQueue类管理NSOperation对象的执行。

    NSOperationQueue可以被称为操作队列,NSOperation可以被称为操作。

    操作被添加到操作队列之后,操作队列会根据操作对象的优先级或者相互之间的依赖关系来执行操作。

    一个应用程序可以创建多个操作队列,每个操作队列分别管理若干操作。

    2.什么时候操作会被移除:
    当操作被添加到队列中以后,我们不能从操作队列中直接移除操作对象。

    当一个操作对象的任务完成之后才会被自动移除。

    任务完成的含义:操作的start方法被调用,并且isFinished方法返回YES。

    3.如何取消任务执行:
    调用操作对象cancel方法并不能使操作马上停止执行。

    当NSOperation的cancel方法被调用后,如果操作不在队列中,这个方法会将操作的isFinished设为YES,如果在操作队列中,这个方法会将操作对象的isCancelled状态设为YES,并且isReady设为YES,让队列调用它的start方法。

    在start或者main方法实现中,我们应该检查isCancelled和isFinished属性,如果任意一个为YES,就不执行操作,直接返回,如果是并发操作,让isFinished方法返回YES,如果是非并发操作,设置isFinished值为YES。

    4.操作队列的相关API:
    (1)创建队列:
    可以调用[[NSOperationQueue alloc] init]方法新建一个操作队列,或者调用类方法currentQueue、mainQueue方法获取现存的操作队列。currentQueue一般在NSOperation对象子类中调用,用来返回启动当前操作的队列,如果NSOperation在非运行状态或者在NSOperation外部调用此方法,一般会返回nil。mainQueue方法返回和主线程绑定的操作队列。
    (2)增加操作:
    addOperation: 增加一个操作对象。
    addOperations:waitUntilFinished: 增加一个操作对象数组,可以阻塞当前线程等待所有操作完成。
    addOperationWithBlock: 以block的方式添加操作,blcok必须为无参数无返回数据。
    (3)最大并发数:
    maxConcurrentOperationCount :最大并发数属性,默认为-1,表示并发数无限制,由系统根据环境条件动态决定。
    setMaxConcurrentOperationCount:设置最大并发数。
    (4)其它:
    operations :获取添加到队列中的所有操作对象。
    operationCount :获取添加到队列中的操作对象的数量。
    setSuspended: 设置队列是否暂停安排操作执行。
    isSuspended :获取队列是否处在暂停安排操作执行的状态。
    cancelAllOperations:调用所有操作对象的cancel方法。
    waitUntilAllOperationsAreFinished:阻塞当前线程,等待所有操作都完成。
    5.KVO兼容的属性
    operations - 只读
    operationCount - 只读
    maxConcurrentOperationCount - 可读写
    suspended - 可读写
    name -可读写
    6.内部实现:
    在iOS4.0及以后,NSOperationQueue内部实现使用GCD,iOS4.0之前,使用NSThread实现
    🚀🚀🚀🚀🚀🚀
    66. 什么时候使用NSMutableArray,什么时候使用NSArray?

    当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray。

    需要指出的是,使用NSArray只表明的是该数组在运行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。

    NSArray线程安全的,NSMutableArray不是线程安全的,多线程使用到NSMutableArray需要注意

    🚀🚀🚀🚀🚀🚀
     67. 简述什么是Object-C简便构造方法?
    简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:

    Foundation下大部分类均有简便构造方法,我们可以通过简便构造方法,获得系统给我们创建好的对象,并且不需要手动释放。
    🚀🚀🚀🚀🚀🚀
     68. 解释什么是NSManagedObject模型?
    NSManagedObjectNSObject的子类 ,也是coredata的重要组成部分,它是一个通用的类,实现了core data 模型层所需的基本功能,用户可通过子类化NSManagedObject,建立自己的数据模型。
    🚀🚀🚀🚀🚀🚀
    69. 解释什么是NSManagedobjectContext?
    NSManagedObjectContext
    它是一个对象,用来表示一个对象空间或者你用来请求,创建,和保存被管理对象的上下文

    概述
    上下文由一组相关的模型象组成,这些对象就是表示由一个或多个持久存储组成的内部一致的视图.

    在关联的上下文中,对托管对象的更改被保存在内存中,直到将该上下文保存到一个或多个持久化存储中。

    一个托管对象实例只存在于一个上下文中但是一个对象的多个副本可以存在于不同的上下文中

    因此,对象对于特定的上下文是唯一的

    生命周期管理
    上下文是一个强大的对象,在托管对象的生命周期中扮演着中心角色,其职责从生命周期管理(包括故障管理)到验证、反向关系处理和撤消/重做。

    通过上下文,您可以从持久存储中检索或“获取”对象,对这些对象进行更改,然后丢弃这些更改,或者通过上下文将它们提交回持久存储。

    上下文负责监视对象中的更改,并维护一个撤消管理器,以便您能够对撤消和重做进行更细粒度的控制。

    您可以插入新的对象并删除已获取的对象,并将这些修改提交给持久存储

    外部存储获取的所有对象都是在一个上下文中注册的,并带有全局标识符(NSManagedObjectID的一个实例),用于惟一标识每个对象到外部存储
    🚀🚀🚀🚀🚀🚀
      70. 使用+ beginAnimations:context:以及上述Block的定义,写出一个可以完成?
    +?(void)transitionWithView:(UIView?*)view?duration:(NSTimeInterval)duration?options:(UIViewAnimationOptions)options?animations:(void?(^)(void))animations?completion:(void?(^)(BOOL?finished))completion?NS_AVAILABLE_IOS(4_0);
    🚀🚀🚀🚀🚀🚀

  • 相关阅读:
    WKWebView iOS17设置UserAgent
    python实现遗传算法,并绘制训练过程以及参数对比
    剑指 Offer 15. 二进制中1的个数,位运算,与运算
    gRPC-Java
    OOM异常类型总结
    猿创征文 | 一个大四学长分享自己的web前端学习路线--webpack篇(2/3)
    学习分享:对极几何、基本矩阵、本质矩阵(持续更新)
    在MongoDB中,您可以通过以下步骤来创建账号密码,并限制其在特定数据库上的访问权限
    2022年最新青海建筑八大员(标准员)考试试题及答案
    python经典百题之交换数组元素
  • 原文地址:https://blog.csdn.net/u013491829/article/details/136593866