Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >访问异常错误performSelector:WithObject: method

访问异常错误performSelector:WithObject: method
EN

Stack Overflow用户
提问于 2012-08-21 20:19:10
回答 1查看 2.6K关注 0票数 1

当我从一个实现了我试图调用的方法的对象调用performSelector:withObject:时,我得到了一个EXC_BAD_ACCESS异常。这是我的代码

代码语言:javascript
代码运行次数:0
复制
SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:myCustomObject];

这会导致崩溃。但是,当我这样做的时候

代码语言:javascript
代码运行次数:0
复制
[self performSelector:@selector(mySelector:withCustomObject:) withObject:myCustomObject];

它起作用了。

你知道为什么会发生这样的事情吗?PS:没有一个参数是空的。

更多代码:

代码语言:javascript
代码运行次数:0
复制
// My code to call this method
SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:self withObject:myCustomObject];

// this code is NOT called.
- (void) mySelector:(jObject *)sender withCustomObject:(jEvent *)customObject
{
    NSDictionary *handlerData = [aProperty objectAtIndex:[event positionInMethodStack]];
    NSString *newTitle = [handlerData objectForKey:@"newTitle"];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 20:41:19

"mySelector:withCustomObject:"是具有2个参数的方法的签名,例如

代码语言:javascript
代码运行次数:0
复制
- (void)mySelector:(id)firstArgument withCustomArgument:(id)secondArgument { ... }

但是您调用performSelector:withObject:,它向mySelector发送一条只有一个参数的消息。第二个参数未定义,这可能会导致崩溃。

因此,如果mySelector实际上有两个参数,则使用performSelector:withObject:withObject:,否则修复选择器的签名。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12062428

复制
相关文章
iOS_performSelector:withObject:afterDelay:
原因是:往全局并发队列里加入了异步任务,会创建子线程。而子线程默认不开启 runloop,而 afterDelay 是通过 NSTimer 实现的,NSTimer 又依赖 rumloop 实现。所以 导致 completion 无法执行。
mikimo
2023/10/18
2230
iOS_performSelector:withObject:afterDelay:
iOS底层学习——KVC下篇
除了对当前对象的属性进行赋值外,还可以对其更深层的对象进行赋值。例如,对当前对象的location属性的country属性进行赋值。KVC进行多级访问时,直接类似于属性调用一样用点语法进行访问即可。
CC老师
2021/08/25
4650
iOS学习系列之多线程—NSThread(一)
iOS线程模型 1 NSThread:objective-c线程库 2 Blocks/GCD: Blocks模式的线程池 3 NSOperationQueue: 线程池/线程队列 今天就先从NSThread学起吧! NSThread NSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。 1NSThread的初始化 /* @method @abstract 初始化方法 @discussion 创建线程之后就自动运行Selector方法 @para
roc
2018/03/30
1.4K0
iOS学习系列之多线程—NSThread(一)
performSelector的方法[通俗易懂]
– (id)performSelector:(SEL)aSelector withObject:(id)object;
全栈程序员站长
2022/09/07
4560
iOS 底层原理探索 之 KVC 我愿称之它为魔法...
键值编码是一种由NSKeyValueCoding非正式协议启用的机制,对象采用该机制来提供对其属性的间接访问。当对象符合键值编码时,其属性可通过字符串参数通过简洁、统一的消息传递接口进行寻址。这种间接访问机制补充了实例变量及其相关访问器方法提供的直接访问。
CC老师
2021/08/25
4280
iOS学习--NSObject详解
官方对于NSObject的解释如下: The root class of most Objective-C class hierarchies, from which subclasses inherit a basic interface to the runtime system and the ability to behave as Objective-C objects.
mukekeheart
2020/12/25
1.1K0
iOS小技能: 限制按钮的点击频率(Target-Action设计模式的运用)
在项目开发中,会对数据库数据进行更新操作的接口请求,不仅服务器侧需要控制请求频率以及保证数据的唯一性和一致性,app侧也需要进行限制来避免产生垃圾数据
公众号iOS逆向
2022/08/22
8780
iOS小技能: 限制按钮的点击频率(Target-Action设计模式的运用)
iOS进阶_KVC(&KVC赋值取值过程分析&KVC自定义&异常处理)
在WTPerson.m中我们让accessInstanceVariablesDirectly返回NO,则程序直接崩溃。
编程怪才-凌雨画
2020/09/18
8500
实践-小细节Ⅳ
网上有很多方法,尝试起来都很麻烦,我这个方法还是比较简单的。 解决方法: 我们在手机用数据线连接到电脑时,会弹出很多手机里面的图片,你的隐私尽收眼底(好尴尬)。在1部分导入A视频文件,点击 2 (照片)的时候会在 3 的位置上出现,此时,我们直接把视频按住,拖到桌面即可,是不是很简单啊!
進无尽
2018/09/12
8090
实践-小细节Ⅳ
iOS PerformSelector 遗漏问题
performSelecor响应了OC语言的动态性:延迟到运行时才绑定方法。当我们在使用以下方法时:
全栈程序员站长
2022/11/17
5090
MySQL Access Method 访问方法简述
通过主键或者唯一二级索引列来定位一条记录的访问方法定义为: const ,意思是常数级别的,代 价是可以忽略不计的。不过这种 const 访问方法只能在主键列或者唯一二级索引列和一个常数进行等值比较时才 有效,如果主键或者唯一二级索引是由多个列构成的话,索引中的每一个列都需要与常数进行等值比较,这个 const 访问方法才有效(这是因为只有该索引中全部列都采用等值比较才可以定位唯一的一条记录)。
Karos
2023/10/23
2810
MySQL Access Method 访问方法简述
iOS SEL的使用和原理?
SEL:类成员方法的指针,与C的函数指针不一样,函数指针直接保存了方法的地址,而SEL只是方法的编号。
赵哥窟
2020/06/16
1.7K0
iOS Target-Action设计模式的运用之【限制按钮的点击频率】
在项目开发中,会对数据库数据进行更新操作的接口请求,不仅服务器侧需要控制请求频率以及保证数据的唯一性和一致性,app侧也需要进行限制来避免测试垃圾数据
公众号iOS逆向
2021/07/05
4080
iOS Target-Action设计模式的运用之【限制按钮的点击频率】
RunLoop在iOS开发中的应用
RunLoop在iOS开发中的应用范围并没有像runtime 那样广泛,我们通过CFRuntime的源代码可知runloop跟线程的是密不可分的,一个线程一定会创建一个对应的runloop,只是主线程创建就自动run了,而子线程只会创建不会自动run。苹果线程管理 Thread Management也说了在线程中利用runloop,
羊羽shine
2019/05/29
1.9K0
多线程(一) 有关死锁以及串行并发同步异步概念
performSelector: withObject: 底层调用[self msgSend];
老沙
2019/09/28
7470
iOS多线程:『pthread、NSThread』详尽总结
本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新:2018年01月26日13:42:11 本文用来介绍 iOS 多线程中,pthread、NSThread 的使用方法及实现。 第一部分:pthread 的使用、其他相关方法。 第二部分:NSThread 的使用、线程相关用法、线程状态控制方法、线程之间的通信、线程安全和线程同步,以及线程的状态转换相关知识。 文中 Demo 我已放在了 Github 上,Demo 链接:传送门 1. pthread 1.1 pthread 简介
程序员充电站
2018/05/31
1K0
Runtime应用(三):NSInvocation
一个大的APP里有多个模块,很多时候模块之间要相互调用、通信,通常情况下,我们都是讲要调用的模块引入进来,然后生成对象,调用其方法。这种情况下,一旦模块比较多,相互调用也比较多,就会出现下图的这种关系,复杂,错乱,耦合比较严重
Helloted
2022/06/07
2260
Runtime应用(三):NSInvocation
错误、异常
tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl 解释器实现的,它是Python标准库的一部分,所以使用它进行GUI编程不需要另外安装第三方库的。
py3study
2020/01/16
6.3K0
错误、异常
iOS开发--performSelector调用和直接调用区别
下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做一下总结, [delegate imageDownloader:self didFinishWithImage:image]; [delegate performSelector:@selector(imageDownloader:didFinishWithImage:)withObject:self withObject:image]; 1、performSe
roc
2018/03/30
2K0
iOS开发--performSelector调用和直接调用区别
iOS学习巩固笔记-UIWebView/JavaScript
2016-05-0908:24:25 发表评论 0℃热度 写一些平时看书学习iOS的笔记,基础的、进阶的都有,供以后回顾,也可以让刚开始学习的同学学习。 1 UIWebView简介 UIWebView
timhbw
2018/05/03
1.2K0

相似问题

performSelector:withObject:afterDelay: within

15

如何使performSelector:withObject:afterDelay工作?

41

不使用NSThread: performSelector:withObject:afterDelay:?

46

如何使用[performSelector: onThread: withObject: waitUntilDone:]?

25

Stop performSelector:withObject:afterDelay for循环

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文