首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS面试题梳理(二)

Objective-C 如何实现 KVO 1.注册观察者(注意:观察者和被观察者不会被保留也不会被释放) - (void)addObserver:(NSObject *)observer forKeyPath...,代理对象实现协议方法,并且需要建立代理关系才可以实现通信; 5.Block:更加简洁,不需要定义繁琐的协议方法,但通信事件比较多的话,建议使用Delegate; Objective-C修改和不可以修改类型...1.修改不可修改的集合,就是动态添加修改和不可动态添加修改。...它不是一个数据库,不仅可以使用SQLite数据库来保持数据,也可以使用其他的方式来存储数据。:XML。...提供的是对象-关系映射功能,也就是说,CoreData可以将Objective-C对象转换成数据,保存到SQL,然后将保存后的数据还原成OC对象。

1.2K101

iOS学习——iOS 整体框架及继承框架图

通知 归档和序列化 表达式和条件判断 Objective-C语言服务 对于Foundation框架的一些基本类的使用方法详情参见:iOS开发系列—Objective-C之Foundation框架  ...框架的入口: #import   ,当引入此头文件后,便可以在程序里使用何在UIKit里声明的。(PS: 当然还要把这个框架链接到你的应用程序)。...3.2 Objective-C的优点   Objective-C语言有C++ Java等面向对象的特点,那是远远不能体现它的优点的。Objective-C的优点是它是动态的。...(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等 等。...对象的编码和解码,下面的方法和对象的编解码(作为归档过程的一部分)有关: encodeWithCoder:和initWithCoder:是NSCoding协议仅有的方法。

3.2K70
您找到你想要的搜索结果了吗?
是的
没有找到

iOS系统架构及常用框架

Core Data:提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至处理任何应用或大或小的数据模型。...当引入此头文件后,便可以在程序里使用何在UIKit里声明的 CoreGraphics 它是iOS的核心图形库,平时使用最频繁的point,size,rect等这些图形,都定义在这个框架名以CG...通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档和序列化 表达式和条件判断 Objective-C语言服务 NSObject Objective-C NSObject...在Objective-C也是用对象来表示的,而的isa指针指向它的metaclass(存储静态成员变量和方法)。 super_class指针:指向父。 name:名称。...cache:因为Objective-C的消息转发需要查找dispatch table甚至可能需要遍历继承体系,所以缓存最近使用的方法。 protocols:需要遵守的协议

7K21

iOS工程师必看的 20 道 面试题

要解答这个问题,就要和Objective-C相同的数据结构设计进行比较。Objective-C,字符串,数组,字典,皆被设计为引用类型。 值类型相比引用类型,最大的优势在于内存使用的高效。...在Swift和Objective-C的混编项目中,如何在Swift文件调用Objective-C文件已经定义的方法?如何在Objective-C文件调用Swift文件定义的方法?...Swift若要使用Objective-C代码,可以在ProjectName-Bridging-Header.h里添加Objective-C的头文件名称,Swift文件即可调用相应的Objective-C...Swift文件若要规定固定的方法或属性暴露给Objective-C使用,可以在方法或属性前加上@objc来声明。...具体过程是在Objective-C对象调用方法时,self.tableview reload,发生了两件事。

3.5K40

IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf

1、引言----接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧趇OS工程快速使用Protobuf,希望对你有帮助...到Protobuf,详解Protobuf的数据编码原理》《IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?...《IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf》(稍后发布..)...《IM通讯协议专题学习(七):手把手教你如何在NodeJS从零使用Protobuf》《IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)》《IM通讯协议专题学习(九):手把手教你如何在...Person.proto为objective-c的文件,编译出来的文件为Person.pbobjc.h和Person.pbobjc.m:protoc Person.proto --objc_out=./

80510

Objective-C的内省(Introspection)

内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。...这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。...明智地使用内省可以使面向对象的程序更加高效和强壮。它有助于避免错误地进行消息派发、错误地假设对象相等、以及类似的问题。 下面的部分将介绍如何在代码中有效地使用NSObject的内省方法。...1 isKindOfClass:Class 检查对象是否是那个或者其继承实例化的对象 1 isMemberOfClass:Class 检查对象是否是那个但不包括继承而实例化的对象 示例: Objective-c...Objective-c代码 // ... if (!

74460

IM通讯协议专题学习(二):快速理解Protobuf的背景、原理、使用、优缺点

1、引言 Protobuf 作为一种跨平台、语言无关、扩展的序列化结构数据通讯协议,已广泛应用于网络数据交换的场景(比如IM通信、分布式RPC调用等)。...《IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf》(稍后发布..)...《IM通讯协议专题学习(七):手把手教你如何在NodeJS从零使用Protobuf》(稍后发布..)...只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言(proto3支持C++, Java, Python, Go, Ruby, Objective-C, C#)或从各种不同流对你的结构化数据轻松读写...同时在编码层面使用varint压缩。 所以描述同样的信息,Protobuf序列化后的体积要小很多,在网络传输消耗的网络流量更少,进而对于网络资源紧张、性能要求非常高的场景。

78430

Objective-C的内省(Introspection)

内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。...这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。...明智地使用内省可以使面向对象的程序更加高效和强壮。它有助于避免错误地进行消息派发、错误地假设对象相等、以及类似的问题。 下面的部分将介绍如何在代码中有效地使用NSObject的内省方法。...1 isKindOfClass:Class 检查对象是否是那个或者其继承实例化的对象 1 isMemberOfClass:Class 检查对象是否是那个但不包括继承而实例化的对象 示例: Objective-c...Objective-c代码 // ... if (!

45950

成为一名优秀 Swift 开发人员的 10 个小技巧

使用 Protocol Protocol 在 Swift 可以做很多事情。使用协议,我们可以设计软件组件的行为,使其符合特定的实现。...Swift 协议类似于 Java 的接口,这是 OOP 编程中最基础的理论。...以下是使用协议的一些场景: 让 modal 与呈现它的组件进行通信; 让多个 UIViewController 或 多个 Cocoa Touch 实现相同的行为; 在 UITableCell 向父 UIViewControllers...使用标记 从 Objective-C 开始,我就一直很喜欢标记。当控制器有成百上千行代码时,标记就显得很重要了。使用标签来分割和管理代码非常重要,可以在代码快速导航。...使用扩展并合理使用它们来创建公共库 我很喜欢 Swift 扩展。在使用 Objective-C 时,我总是不情愿地使用继承。当然这并不总是错误的,正确的使用子类也不会出错。

2.2K40

iOSCocoa框架·Runtime及isa指针知识·填坑

不是编程语言,因为在Cocoa开发你可以使用各种语言;也不是开发工具,你可以在命令行上就可以创建Cocoa程序。...通知 归档和序列化 表达式和条件判断 Objective-C语言服务 1.3 UIKit框架 应用程序可以通过三种方式使用UIKit创建界面 在用户界面工具(interface Buidler)从对象库里...(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等等。...这些内省方法有助于找出对象在层次的位置,确定对象是否实现特定的方法,以及测试对象是否遵循某种协议。...NSObject声明了一些于对象编码有关的方法: classForCoder:、replacementObjectForCoder:、和awakeAfterUsingCoder:。

94420

Ask Apple 2022 与 Core Data 有关的问答 (下)

但是在极少数情况下,例如你需要添加必须在定义声明的属性,此时应使用 Category/Extension 使你可以控制所需的声明。...在可选标量的情况下,Core Data 受限于 Objective-C 表达的类型限制( 例如没有 Int64 这样的类型,可选的类型只能表达为 NSNumber )。...遗憾的是,监控的变化并不包括关系对象的属性值变化。通过谓词重新获取关系对象列表可能是目前最好的方式。...我手动生成了 NSManagedObject 代码并实现了 Codable 协议来实现这一目标。有什么更好的处理方法吗?谢谢。A:Codable 无法准确地对对象图中的对象进行单独编码。...相反,你应该创建一个适合于此处需求的数据子集的可编码转换。或许可以使用 URIRepresentation 。当 NSManagedObject 包含关系时,对其进行编码是极为困难的。

3.2K20

WWDC笔记 - Advancements in the Objective-C Runtime

的指针,包含了的名称,方法,协议,实例变量等等编译期确定的信息。...,之所以要这么设计是因为 Objective-C 是动态语言,你可以在运行时更改它们方法,属性等,并且分类可以在不改变设计的前提下,将新方法添加到。...通过测量实际设备上的使用情况,我们发现大约 10% 的实际会存在动态的更改行为,动态添加方法,使用 Category 方法等。...Tips:Advances in Objective-C 在我们查看对象指针时,在 64 位系统,我们会看到 16 进制地址0x00000001003041e0,我们把它转换为二进制表示如下图 [image...总结 在 2020 年中,Apple 针对 Objective-C 做了三项优化 数据结构变化:节约了系统更多的内存。 相对方法地址:节约了内存,并且提高了性能。

1.3K1815

Objective-C通过下标的方式访问自定义数据模型属性

Objective-C通过下标的方式访问自定义数据模型属性       在Objective-C,可以通过下标来访问数组的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组的元素进行赋值操作...NSMutableArray alloc]init];     array[0] = @"one";     NSString * str = array[0];     NSLog(@"%@",str);        对于Objective-C...,dic[@"name"]);       对于开发者自定义的的数据结构,一般会采用getter与setter方法来对其属性进行访问,虽然官方文档上没有提及,实际上,可以通过实现一些方法,来使自定义的数据模型支持使用下标来进行访问...创建一个数据模型,使其继承自NSObject,如下: MyModel.h @interface MyModel : NSObject @end MyModel.m @implementation MyModel...然而其也有很大的弊端,代码的易调试和可读性都大大的降低,因此,没有特殊需求,一般不要使用这种方式来构建模型。 专注技术,热爱生活,交流技术,也做朋友。 ——珲少

94810

JSONModel源码解析 原

但是这种方式十分不灵活,例如如果网络数据的字段与我们数据模型的字段不一致,某些网络数据的字段可能为nil等等都需要开发者单独的处理。使用JSOMModel可以十分方便的处理映射过程的各种情况。...二、JSOMModel概览     平时在使用JSOMModel框架时,往往只会用到JSOMModel这一个,其实JSOMModel还封装了一套网络请求逻辑,你可以直接对某个对象调用请求来映射成为数据模型...有了这3个协议,在声明属性时,我们可以十分容易的设定他们的解析规则,在JSONModel协议除了可以用来规定解析规则外,还可以用来指定自定义数据类型的解析,只是我们需要自己定义一个协议,名称与自定义名一致...nonatomic,strong)NSString * lastName; @property(nonatomic,strong)Address * address; @end 需要注意,在Objective-C...在对象的初始化方法,首先使用runtime获取所有的属性和属性的修饰内容,所谓修饰内容,即是指属性名称,类型,所遵守的协议,以及是否忽略,是否可选,是否是主键等内容(过程中会使用到属性映射器keyMapper

1.3K20

Objective-C 9 种避免使用 Xcode 预处理器宏的方法

除了极少数例外,使用 Xcode 预处理器宏是一种代码气味。C++ 程序员们已经深有体会:" "。不幸的是,还有很多的 Objective-C 程序员尚未领悟到这一点。...本文是Objective-C 的代码气味系列文章的一篇。 这是一个可以在终端运行的便捷命令。它可以检查并显示当前目录下的源文件,预处理器宏的使用情况,你应该仔细检查。...2、Macros - 宏 Smell #define WIDTH(view) view.frame.size.width 使用 Objective-C 并不意味着不能使用普通的 C 语言函数!...除非您的自定义宏依赖于 Xcode 预处理器宏(__LINE__),否则请将其重写为一个独立函数。(即便依赖于 Xcode 预处理宏,也要让您的宏调用另一个函数,并尽可能多地转移到该函数)。...(当然,你要遵循苹果公司的编码指南,在名称上使用前缀,对吗?)

7410

独家 | 利用Cosmos微服务改善Netflix视频质量

随着VMAF的发展,它已经与Netflix中越来越多的编码和流媒体工作流集成到一起,通过扩展的方式来促进视频质量的创新和优化。...Reloaded系统负责处理导入的媒体文件,视频、音频和字幕等等,并使其可在流媒体服务上播放。Reloaded系统是一个成熟和扩展的系统,然而,其整体架构使得创新的速度得以减缓。...更为重要的是,在Reloaded系统,视频质量度量与视频编码同时生成。...这种紧耦合意味着:如果不进行重新编码,便不可能实现以下目标: A) 推出新的视频质量算法; B) 维护目录数据的质量(:通过BUG 修复)。...使用measureQuality端点调用VQS,VQS API层将外部请求转换为VQS特定的数据模型。 2. 启动工作流。

1.5K30

JavaScriptCore全面解析

使用Apple提供的JavaScriptCore框架,你可以在Objective-C或者基于C的程序执行Javascript代码,也可以向JavaScript环境插入一些自定义的对象。...这段代码展示了如何在Objective-C执行一段JavaScript代码,并且获取返回值并转换成OC数据打印 Output 三、 JSVirtualMachine 一个JSVirtualMachine...六、 JSExport JSExport协议提供了一种声明式的方法去向JavaScript代码导出Objective-C的实例及其实例方法,方法和属性。 1....在Objective-C通过@property声明的属性决定了JavaScript的对应属性的特征: Objective-C的属性,成员变量以及返回值都将根据JSValue指定的拷贝协议进行转换...八、 Prototype JavaScript对于有基于的语言经验的开发人员来说有点令人困惑 (Java或C ++) ,因为它是动态的,并且本身不提供实现。

1.3K20

Python称霸在即,3年后将取代Java成为最受欢迎开发语言

TIOBE索引基于Web搜索跟踪编程语言的流行程度,使用一个公式来评估搜索引擎(Google,Yahoo和Bing)与编程语言相关的搜索。...Swift在去年同期排名第15位,上个月排名第18位,而其前身Objective-C语言本月排名第12位,评分为1.391。 Tiobe分析师预计Objective-C将在两年内退出前20名。...即使要完全理解和运行'hello world'这样最简单的程序,你需要掌握、静态方法和包的概念。 C相对简单一点,没那么多复杂的概念。但是在显式内存管理方面新手会备受打击。...同时它是面向对象的,应用领域也非常广泛,从创建网站到应用程序开发、再到创建不同类型的数据模型,都游刃有余。...这是一个全球性组织,面向对Python编码感兴趣的女性和其他性别少数群体。

39940

Python称霸在即,3年后将取代Java成为最受欢迎开发语言

TIOBE索引基于Web搜索跟踪编程语言的流行程度,使用一个公式来评估搜索引擎(Google,Yahoo和Bing)与编程语言相关的搜索。...Swift在去年同期排名第15位,上个月排名第18位,而其前身Objective-C语言本月排名第12位,评分为1.391。 Tiobe分析师预计Objective-C将在两年内退出前20名。...即使要完全理解和运行'hello world'这样最简单的程序,你需要掌握、静态方法和包的概念。 C相对简单一点,没那么多复杂的概念。但是在显式内存管理方面新手会备受打击。...同时它是面向对象的,应用领域也非常广泛,从创建网站到应用程序开发、再到创建不同类型的数据模型,都游刃有余。...这是一个全球性组织,面向对Python编码感兴趣的女性和其他性别少数群体。

48950
领券