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

iOS BAT面试对答题

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

95200

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, //渐变出现

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

    iOS中WebKit框架应用与解析 原

    iOS中WebKit框架应用与解析 一、引言         在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

    2K40

    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.7K21

    iOS NSPROXY ARC填坑记

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

    55720

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

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

    1.6K70

    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.4K20

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

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

    1.6K80

    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方法替换和注入的实现基础。

    73520

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

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

    64450

    iOS开发-Runtime详解

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

    73870

    iOS开发-Runtime详解

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

    74390

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

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

    1.3K40

    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.6K10

    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函数在入参不同时的不同版本。

    28730

    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.9K20

    面经之《招聘一个靠谱的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指针指向元对象

    1K100

    使用 Swift 提高代码质量

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

    4.7K30

    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.3K31

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券