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

如何修复NSTimer中“向'SEL _Nonnull‘类型的参数发送'void (void)’的不兼容指针类型”

在修复NSTimer中的“向'SEL _Nonnull‘类型的参数发送'void (void)’的不兼容指针类型”错误时,可以采取以下步骤:

  1. 确定错误的原因:该错误通常是由于NSTimer的selector参数类型不匹配引起的。NSTimer的selector参数应该是一个方法选择器,它指向一个没有参数和返回值的方法。
  2. 检查方法的定义:确保被指定为NSTimer的selector参数的方法没有参数,并且返回类型为void。
  3. 使用@selector指令:在设置NSTimer时,使用@selector指令来获取方法的选择器。例如,如果要调用名为"timerFired"的方法,可以使用@selector(timerFired)来获取选择器。
  4. 确保方法的声明在合适的位置:确保方法的声明在使用它的地方之前。可以将方法的声明放在类的头文件中或者在使用之前的地方进行前向声明。
  5. 检查方法的命名:确保方法的命名与@selector指令中使用的名称完全匹配,包括大小写。
  6. 检查方法的可见性:确保方法在设置NSTimer的地方可见。如果方法是私有方法,可以将其声明为私有或者将其放在类的实现文件中。
  7. 检查NSTimer的初始化:确保NSTimer的初始化方法正确使用了选择器参数。例如,使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:方法来初始化NSTimer,并确保选择器参数正确设置。

修复NSTimer中的“向'SEL _Nonnull‘类型的参数发送'void (void)’的不兼容指针类型”错误后,可以确保NSTimer正常工作,并且不会出现类型不匹配的问题。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维服务:https://cloud.tencent.com/product/dt
  • 腾讯云音视频处理服务:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS APP运行时Crash自动修复系统

: 这个方法,所以testObj发送someMethod:这个方法时候,将会导致该方法无法在相关方法列表里找到,最终导致appcrash。...:(SEL)sel; //后两个方法需要转发到其他类处理 - (id)forwardingTargetForSelector:(SEL)aSelector; - (void)forwardInvocation...3.4 NSTimer类型crash防护(NSTimer) 3.4.1 NSTimer crash 产生原因 在程序开发过程,大家会经常使用定时任务,但使用NSTimer scheduledTimerWithTimeInterval...3.7 野指针类型crash防护(Bad Access) 3.7.1 野指针crash 产生原因 在App所有Crash,访问野指针导致Crash占了很大一部分,野指针类型crash表现为:Exception...实例全部方法拦截机制 和 消息转发机制,那么就可以做到在野指针访问时Crash而只是crash时相关信息。

3.2K1713

iOS 如何解决 NSTimer 循环引用

在 ViewController 执行 dealloc 前释放 timer(推荐) ---- 可以在 viewWillAppear 创建 timer 可以在 viewWillDisappear 销毁...,NSTimer 强引用 PFTimer,避免让NSTimer 强引用 ViewController,这样就不会引起循环引用,然后在 dealloc 方法执行 NSTimer 销毁,相对 PFTimer...使用很简单,但是要注意两点: 避免 block 循环引用,使用 __weak 和 __strong 来避免 在持用 NSTimer 对象方法 -(void)dealloc 调用 NSTimer...在 NSTimer+PFSafeTimer.m 代码如下: #import "NSTimer+PFSafeTimer.h" @implementation NSTimer (PFSafeTimer...)sel { return [self.object methodSignatureForSelector:sel]; } @end 在使用时候如下代码: #import "ViewController1

1.4K30

iOS运行时Runtime基础

说明:OC调用方法[receiver selector],编译阶段确定了要向哪个接收者发送message消息,但是接收者如何响应决定于运行时判断。...Objective-C在编译时,会依据每一个方法名字、参数序列,生成一个唯一整型标识(Int类型地址),这个标识就是SEL。 注意: 1.不同类相同名字方法对应方法选择器是相同。...: method_name:方法名类型SEL method_types: 一个char指针,指向存储方法参数类型和返回值类型 method_imp:本质上是一个指针,指向方法实现 这里其实就是...(IMP)(void / id, SEL, ... */ ); IMP这个函数指针指向了方法实现首地址,当OC发起消息后,最终执行代码是由IMP指针决定。...@param name selector方法名 @param imp 指向实现方法函数指针 @param types imp函数实现返回值与参数类型 @return 添加方法是否成功 *

88830

iOS常见内存问题——循环引用

全局 Block 比较简单,凡是没有引用到 Block 作用域外面的参数 Block 都会放到全局内存块,在全局内存块 Block 不用考虑内存管理问题。...引用,则会有一个强引用指针指向 self,就会发生循环引用,如果采用 weakSelf,内部不会有强类型指针,所以可以解决循环引用问题。...内部都会重新生成一个新指针指向 self,这是一个强引用指针,结果就会导致循环引用。...因为他也是 Foundation 框架基类, 通常用来实现消息转发, 我们可以用它来包装 NSTimer target, 达到弱引用效果。...名,参数和返回值类型,最重要是有所有参数值,可以从这个 NSInvocation 对象里拿到调用所有参数值。

1.7K10

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

另外我们常见id类型,它是一个objc_object结构类型指针。该类型对象可以转换为任何一种对象,类似于C语言中void *指针类型作用。...当对象发消息,runtime会在这个对象所属类方法列表查找发送消息对应方法,但当发送消息时,runtime就会在这个类meta class方法列表里查找。...SEL 方法类型 method_types 是个 char 指针,存储方法参数类型和返回值类型 method_imp 指向了方法实现,本质是一个函数指针 简言之,Method = SEL + IMP...(*IMP)(id _Nonnull, SEL _Nonnull, ...); #endif 实际上就是一个函数指针,指向方法实现首地址。...void *类型参数

1.4K40

iOS 开发:『Crash 防护系统』(一)Unrecognized Selector

在这个过程, 说不定会因为崩溃而导致关键业务中断、用户存留率下降、品牌口碑变差、生命周期价值下降等,最终导致流失用户,影响到公司发展。 当然,避免崩溃问题最好办法就是产生崩溃。...,在各个分类 +(void)load; 通过 Method Swizzling 拦截容易造成崩溃系统方法,将系统原有方法与添加防护方法 selector(方法选择器) 与 IMP(函数实现指针...然后在替换方法添加防护操作,从而达到避免以及修复崩溃目的。...所以 testButoon 对象发送 someMethod: 方法,就会导致 testButoon 对象无法找到对应方法实现,最终导致 APP 崩溃。...消息重定向:Runtime 系统利用 methodSignatureForSelector: 方法获取函数参数和返回值类型

2K30

iOS_定时器:NSTimer、GCDTimer、DisplayLink

文章目录 一、NSTimer 1. 工作原理 2. 初始化方法区别 3. 8种初始化方法: 4. work原因 5. 循环引用 6....初始化方法区别 NSTimer初始化方法只有scheduled开头,会自动把Timer添加到当前RunLoopDefaultMode里。...3大缺陷:RunLoop、Thread、Leaks 因为NSTimer依赖RunLoop实现,所以: 1.默认在RunLoopDefaultMode下计时 (导致scrollView滑动work...) 2.RunLoop对NSTimer保持强引用 (容易导致内存泄露问题) 3.子线程默认创建RunLoop,导致NSTimer失效 4.NSTimer创建和撤销必须在同一个线程操作,不能跨线程操作...一样:依赖RunLoop,会对target造成强引用 解决办法也可以跟NStimer一样 四、对比总结 以上说了iOS3计时器,各有优缺点: NSTimer:适用于各种计时/循环处理事件,频率计算可以按秒计

70620

关于runtime

当程序执行[object doSomething]时,会消息接收者(object)发送一条消息(doSomething),runtime会根据消息接收者是否能响应消息而做出不同反应。...runtime执行流程: 首先,通过objectisa指针找到它 class ; 在 class method list 找 doSomething ; 如果 class 没到 doSomething...指向一个方法实现指针 typedef id (*IMP)(id, SEL, ...); #endif 在iOSRuntime,Method通过selector和IMP两个属性,实现了快速查询方法及实现...class] SEL name: 将要添加方法名,传类型 @selector(方法名) IMP imp:实现这个方法函数 ,传类型 1,C语言写法:(IMP)方法名 2,OC写法..."v@:":v:是添加方法无返回值 @表示是id(也就是要添加类) :表示添加方法类型 @表示:参数类型 2.备用接收者 如果动态解析返回为NO,则执行forwardingTargetForSelector

55410

iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API兼容奔溃,模拟多继承)

),苹果系统迭代造成API兼容奔溃处理,第四节将总结消息转发机制。...示例:0x12345678对象发送meaning并且没有参数。 选择器:表示消息或方法名称一种特殊方式,表示为类型SEL。...objc_msgSend(id _Nullable self, SEL _Nonnull op, ...)` 1.2 消息发送主要步骤 消息发送时候,在C语言函数中发生了什么事情?...换句话说,无论何时发送未知消息,它​​都会以一个很好发送到您代码,此时您可以随心所欲地执行任何操作。 1.3 OC方法本质 OC方法默认被隐藏了两个参数:self和_cmd。...@代表self类型id,第三个字符:代表_cmd类型SEL

1.8K11

iOS开发·RunLoop源码与用法完全解析(输入源,定时源,观察者,线程间通信,端口间通信,NSPort,NSMessagePort,NSMachPort,NSPortMessage)

你只能在一个线程内部获取其 RunLoop(主线程除外)。 ? Demo如何查看线程栈 5....selector也是特殊基于自定义源.理论上来说,允许在当前线程任何线程上执行发送消息,和基于端口源一样,执行selector请求会在目标线程上序列化,减缓许多在线程上允许多个方法容易引起同步问题...(如果当前线程没runloop则方法无效;performSelector:onThread: 方法放到指定线程runloop) - (void)performSelector:(SEL)aSelector...完成主线程port发送消息 [self sendPortMessage]; } } 当使用 NSMachPort 时候,本地和远程线程可以使用相同端口对象在线程间进行单边通信...可是添加到子线程NSDefaultRunLoopMode里,无论如何滚动,timer都能够很正常运转。这又是为啥呢?

2.1K20

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

每一个对象内部都有一个isa指针,这个指针是指向它真实类型 根据这个指针就能知道将来调用哪个类方法 下面的代码输出什么?...在一个对象发送消息时,runtime库会根据对象isa指针找到该对象实际所属类 然后在该类方法列表以及其父类方法列表寻找方法运行 如果,在最顶层父类(一般也就NSObject)依然找不到相应方法时...在Objective-Cnil发送消息是完全有效——只是在运行时不会有任何作用 如果一个方法返回值是一个对象,那么发送给nil消息将返回0(nil) 如果方法返回值为指针类型,其指针大小为小于或者等于...如果一个nil对象发送消息,首先在寻找对象isa指针时就是0地址返回了,所以不会出现任何错误 objc一个对象发送消息obj foo和objc_msgSend()函数之间有什么关系?...* 首先它会发送-methodSignatureForSelector:消息获得函数参数和返回值类型

1.6K21

runtime那些事(一)——runtime基础介绍

方法一定会有两个参数:消息接收者、消息方法名称 runtime 核心是消息机制,其执行过程大致可分为三个部分:消息发送、动态方法解析、消息转发 编译阶段: 以上全都为不带参数方法编译后C函数结构...最终通过runtimeclass_addMethod(Class _Nullable cls, SEL _Nonnull name, IMP _Nonnull imp, const char * _.../** 运行时方法:指定类添加特定方法实现操作 @param cls 被添加方法类 @param name selector方法名 @param imp 指向实现方法函数指针 @param...关于types参数,即 IMP 函数实现返回值与参数类型,可以参考官方说明文档Objective-C Runtime Programming Guide 在动态解析方法过程 对象方法 执行顺序为...通过下面这张图可以更好地理解 isa指针在类向上传递查找顺序,也正好佐证了上述类方法在动态解析过程为什么执行了两次。 ? isa指针查找顺序图 2.

1.3K20

NSTimer使用

userInfo:(id)userInfo   repeats:(BOOL)yesOrNo; 创建返回一个新NSTimer对象和时间表,在当前默认模式下循环调用一个实例方法。...表示输入一个时间间隔对象,以秒为单位,一个>0浮点类型值,如果该值<0,系统会默认为0.1  target:(id)aTarget 表示发送对象,如self  selector:(SEL)aSelector...方法选择器,在时间间隔内,选择调用一个实例方法 userInfo:(id)userInfo 此参数可以为nil,当定时器失效时,由你指定对象保留和释放该定时器。...repeats:(BOOL)yesOrNo 当YES时,定时器会不断循环直至失效或被释放,当NO时,定时器会循环发送一次就失效。...userInfo:nil                                                                 repeats:NO]; } //触发事件 -(void

70690
领券