IOS面试题object-c 61-70

news/2024/7/20 20:54:29 标签: ios, object-c, 面试题
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);
🚀🚀🚀🚀🚀🚀


http://www.niftyadmin.cn/n/5418114.html

相关文章

2.4_3 死锁的处理策略——避免死锁

文章目录 2.4_3 死锁的处理策略——避免死锁(一)什么是安全序列(二)安全序列、不安全状态、死锁的联系(三)银行家算法 总结 2.4_3 死锁的处理策略——避免死锁 银行家算法是“避免死锁”策略的最著名的一个…

WPF 防止按钮Click时间多次点击响应

可能不是最好的办法,但是用起来效果也还是可以的。 原理:通过IsEnabled属性来控制按钮状态。btnConfirm.IsEnabled / this.IsEndbled 这两种方式是等价的。 案例比较简单,如果后期做开发的话代码量变大,只在结尾添加 this.IsEn…

从零开始:神经网络(2)——MP模型

声明:本文章是根据网上资料,加上自己整理和理解而成,仅为记录自己学习的点点滴滴。可能有错误,欢迎大家指正。 神经元相关知识,详见从零开始:神经网络——神经元和梯度下降-CSDN博客 1、什么是M-P 模型 人…

蓝桥杯大赛软件python赛道真题:蛇形填数

真题链接:https://www.lanqiao.cn/problems/594/learning/ 题目描述: 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 …

IM6ULL学习总结(四-七-1)输入系统应用编程

第7章 输入系统应用编程 7.1 什么是输入系统 ⚫ 先来了解什么是输入设备? 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 ⚫ 什么是输入系统? 输入设备种类繁多,能否统一它们的…

数据结构入门篇 之 【单链表】的实现讲解(附单链表的完整实现代码以及用单链表完成通讯录的实现代码)

虽然封面是顶针,但是我们还是要好好学习❀ 一.单链表 1.单链表的概念 2.单链表的结构 3.单链表的实现 1).尾插函数 SLTPushBack 2).打印函数 SLPrint 3). 头插函数 SLTPushFront 4).尾删函数 SLTPopBack 5&am…

【编译原理】1、python 实现一个 JSON parser:lex 词法分析、parser 句法分析

文章目录 一、实现 JSON lexer(词法解析器)二、lex 词法分析2.1 lex string 解析2.2 lex number 解析2.3 lex bool 和 null 解析 三、syntax parser 句法分析3.1 parse array 解析数组3.2 parse object 解析对象 四、封装接口 一、实现 JSON lexer&#…

计算机网络-网络应用服务器(四)

1.Samba服务器: Samba是Linux上实现和Windows系统局域网上共享文件和打印机的一种通信协议,由服务器及客户端程序构成。支持SMB/CIFS协议,实现共享资源。最主要的一个配置文件smb.conf,可以使用vi编辑器修改。守护进程&#xff1a…