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

iOS BAT面试对答题

objc向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的,然后该类的方法列表以及其父方法列表寻找方法运行,如果一直到根还没找到,转向拦截调用,走消息转发机制,...3.objc向一个nil对象发送消息将会发生什么? 如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。也不会崩溃。...objc向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的,然后该类的方法列表以及其父方法列表寻找方法运行,如果,最顶层的父依然找不到相应的方法时,会进入消息转发阶段...每一个对象中都一个方法列表,方法列表记录着方法的名称,方法实现,以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以方法列表中找到对应的方法实现. 10....4.如何解决滑动页面上的列表时,timer会暂停回? 将Timer放到NSRunLoopCommonModes执行即可 5.NSTImer使用时需要注意什么?

91700

iOS小技能:APP内的本地化语言切换(案例:登录界面切换中英文)

前言 原理: 从指定的表和包返回字符串的本地化版本: NSLocalizedStringFromTableInBundle(key, table, _bundle, nil) 切换语言生效方式:采用销毁根控制器...Localizable.strings文件 Localizable.strings(Chinese)对应zh-Hans.lproj文件夹的Localizable.strings文件 资源文件Localizable.strings.../article/details/108793150 原理:%和@中间加上数值 (1 ,2$),数字代表参数的顺序 "FORMAT" = "I am %2$@ from '%1$@'"; II 自定义解析本地化字符串的工具..."; IV 案例 4.1 《用户协议及隐私政策》弹框(包含超链接属性)【本文包含完整demo源码,demo支持中英文切换】 iOS《用户协议及隐私政策》弹框(包含超链接属性)【本文包含完整demo源码...从下到上盖上进入 UIModalTransitionStyleFlipHorizontal, //水平翻转 UIModalTransitionStyleCrossDissolve, //渐变出现

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

iOSWebKit框架应用与解析 原

iOSWebKit框架应用与解析 一、引言         iOS8之前,应用嵌入网页通常需要使用UIWebView这样一个,这个通过URL或者HTML文件来加载网页视图,功能十分有限,只能作为辅助嵌入原生应用程序...二、WebKit框架概览         WebKit框架涉及的很多,框架的设计十分面向对象和模块化,开发者使用时可以轻松的写出结构清晰的代码。...WKProcessPool * pool = [[WKProcessPool alloc]init]; config.processPool = pool; WKProcessPool没有暴露任何属性和方法...native代理的回方法,会获取到JavaScript传递进来的消息,如下: -(void)userContentController:(WKUserContentController *)userContentController...,网页节点被抽象成为了WKBackForwardListItem,这个中封装的属性如下: @interface WKBackForwardListItem : NSObject //当前节点的URL

1.9K40

2020-iOS最新面试题解析—1(原理篇)

NSObject -dealloc * 只做一件事:调用 Objective-C runtime 的 object_dispose() 方法 4\.......的方式触发的timer,滑动页面上的列表时,timer会暂定回,为什么?...向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的 然后该类的方法列表以及其父方法列表寻找方法运行 如果,最顶层的父(一般也就NSObject依然找不到相应的方法时...,runtime库会根据对象的isa指针找到该对象实际所属的,然后该类的方法列表以及其父方法列表寻找方法运行,然后再发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的...如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误 objc向一个对象发送消息obj foo和objc_msgSend()函数之间有什么关系?

1.6K21

iOS NSPROXY ARC填坑记

首先,苹果在 iOS9 之后已经放弃了 NSURLSession所以现在的实际开发,一般使用的是 iOS7 之后推出的NSURLSession。...第二个任务是task结束后,第三个任务是进行初始配置 三个方法分别关闭,逐个回调情况 xxx_urlSessionTaskDidStart和xxx_urlSessionTaskDidStop分别关闭时偶尔出现...,一起关闭时偶尔出现 xxx_sessionWithConfiguration关闭时,偶尔出现 。。。...是根,与NSObject类似 NSProxy和NSObject都实现了协议 NSObject的所有Category定义的方法无法继承NSObject的代理完成转发,...NSProxyARC下,弱引用的属性,会被强制置空,不要怀疑,亲测有效 https://joris.kluivers.nl/blog/2012/03/26/weak-references-to-nsproxy-with-arc

50820

KVO详解及底层实现

,能够给对象添加方法而不需要创建子类),非正式协议的方法是可选的 正式协议: 一个正式协议声明了需要实现的方法列表,正式协议有自己的声明、采用和类型检查语法。...; // 修改isa指针,由ZJPerson指向ZJKVO_Person object_setClass(self, kvoClass); // 保存观察者属性到当前...object_setClass(self, kvoClass); } 注意一 要修改下xcode的一个配置,将它改为NO,否则会报参数太多的错误: 注意二 解释下代码v@:@的意思: 第一个...v表示方法返回值void 第二三个@:一般是一块的,因为函数至少有两个参数self和_cmd,一般是固定写法 最后一个@表示参数类型,是一个对象 下面代码实验,看下我们自己写的kvo有没有执行: 修改添加监听者的方法...forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 看下回的打印

2.2K20

KVO 正确使用姿势进阶及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里

此时如果点击第二个按钮BTN2不幸的事情就会产生,button2Clicked方法中会产生野指针错误,因为该方法修改了model.balance的值,由于前一个视图中没有删除监听器,KVO仍然有监听器的存在...但KVO还有一个可能会产生错误的地方,在看下一个栗子之前有一点需要说明,有时候我们可能在一个视图中监听很多模型对象,当然了可以按照我们常用的通过keyPath字符串来判断产生回的具体是哪个属性值,但如果监听很多属性值...,也就是所有注册了的监听器都会执行回函数,但由于继承关系的存在没有执行父的回函数而是执行了两次子类的回函数,因此,为了使得父也能够正确执行监听器的回函数,子类的回函数应当手动调用,所示子类监听器回函数正确的写法应是如下代码...addObserver与removeObserver必须要成套出现,建议dealloc方法删除监听器对象。...当对一个对象的属性第一次进行监听器注册后,编译器会默认生成一个名称为NSKVONotifying_原有名称的派生中间,该类继承原有,然后修改原有对象的isa指针,使其指向新生成的中间,接着,会在派生修改监听属性

1.5K80

runtime官方文档翻译版本通过OC源代码通过NSObject定义的方法直接调用运行时的函数消息传递机制使用隐藏参数获取方法地址动态方法解析动态加载消息转发转发和多继承代理对象转发和继承类型编码声

通过NSObject定义的方法 Cocoa,大多数对象是NSObject的子类对象,所以大多数对象继承了他定义的方法(NSProxy除外)。因此它的方法建立每个实例,每个对象的行为。...NSObject的子类可以实现这个方法返回更多的细节。例如,FoundationNSSArray返回一个它包含对象的描述列表NSObject方法的一些简单的查询的运行时系统信息。...为了加速消息传递过程,方法被使用时,运行时系统缓存了方法的选择器和地址。每个都有一个单独的缓存,它包含了继承的方法和自己定义的方法的选择器。...谈判的战士将会出现像一个外交官。...你可以使用支持通过名字查看,分类,协议属性的方法来查看这个元数据,获得这个属性的@encode字符串类型,复制成一个C语言字符串数组属性属性列表。声明属性列表可用于每个和协议。

1.5K70

GB代码规范1.0

; @end 错误写法 @interface Text : NSObject - (void)testFunction; @end 声明const的字符串 开头用k标识 推荐k+模板名字首字母大写...+作用名称 防止和其他的重复 比如:CartViewModel需要声明更新购物车列表的通知 kCVMNoticationUpdateCartList 如果是声明Cell的重用字符 k+cell...编译失败 不容易查找的BUG 造成的缺点 m文件还要#import 其他调用这个类属性也要#import对应的 综合来说宁愿自己多操作 也要防止这种循环引入的BUG的出现 pragma mark的使用...// 显示banner列表 } 不建议的写法 if(state == 0){ // 显示没数据 }else if(state == 1) { // 显示请求错误 }else if(state...== 2) { // 显示商品的列表 }else if(state == 3) { // 显示banner列表 } 多使用族 比如我们需要创建一个 有多个样式 typedef NS_ENUM

1.2K20

RunTime 之使用前须知

保存了方法的列表。当一个方法被调用时,元会首先查找它本身是否有该类方法的实现,如果没有,则该元会向它的父查找该方法,直到一直找到继承链的头。...一个 NSObject的方法同时也会被 NSObject 的子类查找方法时找到。...(比如.h声明了方法,但.m没有实现,就可以重现这个错误 Objective-C 语言中,每一个实际上也是一个对象。每一个也有一个名为 isa 的指针。...调用一个实例的方法,所做的是向该实例的指针发送消息,实例收到消息后,从自身的实现寻找响应这条消息的方法。 动态绑定所做的,即是实例所属确定后,将某些属性和相应的方法绑定到实例上。...这里所指的属性和方法当然包括了原来没有实现的,而是在运行时才需要的新加入的实现。 这是使用Runtime方法替换和注入的实现基础。

69920

《Objective-C高级编程》温故知新之自动引用计数

GUNstep的NSObject的alloc方法间接调用NSZoneMalloc函数来分配存放对象所需的内存空间,之后将内存空间置0,最后返回作为对象而使用的指针。...class_createInstance 函数的源码可以通过obj4库的源码进行确认 从源代码的函数来看,苹果的实现大概就是采用散列表(引用计数表)来管理引用计数。...引用计数表各记录存有内存块地址,可从各个记录追溯到各对象内存块。 其中第二条最重要。即使出现故障导致对象占用的内存块损坏,但只要引用计数表没有被破坏,就能够确认各内存块的位置。...书原文中写道:声明成员变量时,如果同属性声明属性不一致则会引起编译错误。...良策是只需要避免循环引用时才使用 __weak 修饰符 { id __weak obj = [[NSObject alloc] init]; } 但上面会引起编译器警告

59750

iOS开发-Runtime详解

通过 Foundation 框架的 NSObject 定义的方法 Cocoa 程序绝大部分类都是 NSObject 的子类,所以都继承了 NSObject 的行为。...如果类的方法列表找不到就到父的方法列表查找,一直找到 NSObject 为止。 如果还找不到,就要开始进入动态方法解析了,后面会提到。...如果我们使用关键字 @dynamic 的实现文件修饰一个属性,表明我们会为这个属性动态提供存取方法,编译器不会再默认为我们生成这个属性的 setter 和 getter 方法了,需要我们自己提供。...当 Runtime 系统 Cache 和的方法列表(包括父)找不到要执行的方法时,Runtime 会调用 resolveInstanceMethod: 或 resolveClassMethod:...哪天苹果更新了 NSObject 的话,就会出现问题: ? 我们自定义的的区域和父的区域重叠了。

70590

iOS开发-Runtime详解

通过 Foundation 框架的 NSObject 定义的方法 Cocoa 程序绝大部分类都是 NSObject 的子类,所以都继承了 NSObject 的行为。...如果类的方法列表找不到就到父的方法列表查找,一直找到 NSObject 为止。 如果还找不到,就要开始进入动态方法解析了,后面会提到。...如果我们使用关键字 @dynamic 的实现文件修饰一个属性,表明我们会为这个属性动态提供存取方法,编译器不会再默认为我们生成这个属性的 setter 和 getter 方法了,需要我们自己提供。...当 Runtime 系统 Cache 和的方法列表(包括父)找不到要执行的方法时,Runtime 会调用 resolveInstanceMethod: 或 resolveClassMethod:...哪天苹果更新了 NSObject 的话,就会出现问题: ? 我们自定义的的区域和父的区域重叠了。

69970

Objective-C Runtime:深入理解与对象

,从而避免每次方法调用时都去查找对象的整个方法列表,提升性能。...,所有的成员变量、属性的信息是放在链表ivars的。...注意,返回的列表不包含父的成员变量和属性; Objective-C不支持往已存在的添加实例变量,因此不管是系统库提供的,还是我们自定义的,都无法动态添加成员变量; 当通过运行时来创建一个的时候...2、属性相关的操作函数: // 获取指定的属性 objc_property_t class_getProperty ( Class cls, const char *name ); // 获取属性列表...B通过添加一些额外的属性来扩展A。现在我们创建了一个A的实例对象,并希望在运行时将这个对象转换为B的实例对象,这样可以添加数据到B属性

1.2K40

iOS CocoaPods 子模块实现多语言

bundle 的值是实现 APP 内切换语言的关键所在,我们需要用一个专门的来管理 APP 显示语言。...:Localizable.strings,且必须是这个名字) 3、自定义代码字符串本地化(可以自定义文件名和位置) 因为这个多语言功能是子模块的,所以只能使用第三种。...新建自定义本地化文件 首先需要command + N,选择iOS -> Resource -> Strings File,文件名(可自定义)为:Contact.strings 文件创建成功,查看Xcode左侧导航列表..."test"="this is test"; 详细步骤请参考:3分钟实现iOS语言本地化/国际化(图文详解) 3.2 配置.podspec 私有库配置文件定义podspec 文件,指定资源打包的方式...// 此方法放在子模块的,用于定位SDK的语言文件 + (NSBundle *) ContactBundle { static dispatch_once_t onceToken;

2.3K10

iOS_ __attribute__

语法关键字是__attribute__紧跟2套圆括号,括号内是一个以逗号分隔的属性列表。 __attribute__指令被放在前、函数/变量声明后面。...:(见下文) format、format_arg:(见下文) weak、section:(见下文) noreturn:表示没有返回,当遇到类似函数还未运行到return语句就需要退出来的情况,该属性可以避免出现错误信息...函数被调用之后 __attribute__((destructor)) void funName() { } // C/C++环境下work,还可以设置优先级参数(越小约高) __attribute...objc_requires_spuer 某个方法上添加这个,编译器会提醒子类的重写方法调用 [super] __attribute__((objc_requires_spuer)) objc_runtime_name...函数重载C是通过overloadable属性引入的。例如:你可以重载tgsin函数,写出sin函数入参不同时的不同版本。

22130

iOS开发之ExternalAccessory框架的应用

EAAccessoryManager用来对外设进行管理,其中属性方法如下: @interface EAAccessoryManager : NSObject // 获取单例对象 + (EAAccessoryManager...*)sharedAccessoryManager; // 打开蓝牙外设搜索列表 - (void)showBluetoothAccessoryPickerWithNameFilter:(nullable...EASession用来进行外设交互,解析如下: @interface EASession : NSObject // 指定外设和协议来创建会话对象 - (nullable instancetype)initWithAccessory...> // 搜索状态改变后调用的回 /* typedef NS_ENUM(NSInteger, EAWiFiUnconfiguredAccessoryBrowserState) { EAWiFiUnconfiguredAccessoryBrowserStateWiFiUnavailable...nonatomic, readonly) NSString *ssid; // 硬件地址 @property(copy, nonatomic, readonly) NSString *macAddress; //属性

1.7K20

面经之《招聘一个靠谱的iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

ivar_list 添加一个成员变量的描述, method_list 增加 setter 与 getter 方法的描述,属性列表增加一个属性的描述,然后计算该属性在对象的偏移量,然后给出...,runtime库会根据对象的isa指针找到该对象实际所属的,然后该类的方法列表以及其父方法列表寻找方法运行,然后发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的...那么,回到本题,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。...objc向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的,然后该类的方法列表以及其父方法列表寻找方法运行,如果,最顶层的父依然找不到相应的方法时,程序在运行时会挂掉并抛出异常...每一个对象内部都有一个isa指针,指向他的对象,对象存放着本对象的 对象方法列表(对象能够接收的消息列表,保存在它所对应的对象) 成员变量的列表, 属性列表, 它内部也有一个isa指针指向元对象

971100

使用 Swift 提高代码质量

安全性 代码安全 let属性 - 使用let申明常量避免被修改。 值类型 - 值类型可以避免方法调用等参数传递过程状态被修改。...不过代码错误至少应该分为两,一是程序本身的错误通常会引发Crash,另外一种是业务逻辑错误。使用as?只是避免了程序错误Crash,但是并不能防止业务逻辑错误。...但是不应该随意的定义可选值,可选值不能用let定义,并且使用时必须进行解包操作相对比较繁琐。代码设计时应考虑这个值是否有可能为nil,只合适的场景使用可选值。...包大小 - 相比class,值类型不需要创建ObjC对应的ro_data_t数据结构。 提示:class即使没有继承NSObject也会生成ro_data_t,里面包含了ivars属性信息。...避免使用@objcMembers 使用@objcMembers修饰的,默认会为/属性/方法/扩展都加上@objc标识。

4.6K30

NSObject头文件解析 消息机制 Runtime解读 (一)

使用instanceType类型返回的对象编译器能找到他的属性方法 所以使用InstanceType是为了能更好的帮助编译器找到对象的属性和方法, 减少不必要的错误 Copy 和MutableCopy...例子: 的实现文件重写doesNotRecognizeSelector方法, 增加打印一行字, 注意自定义的内容要写在调用父方法前面, 否则调用父方法就直接crash了, 不会继续执行后面的内容...// 输出:Person Class isa: 需要注意的是Objective-C,所有的自身也是一个对象,这个对象的Class里面也有一个isa指针,它指向metaClass(元) 元对象(...object所属于的,然后的方法列表以及父方法列表寻找对应的方法运行。...: id object_getIvar(id obj, Ivar ivar) 这3个函数合起来可以读取和修改成员变量(不能获取@property修饰的属性变量), 举例: 我们有一个ClassA, 添加一个私有成员属性

1.1K31

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券