Because you're dynamically assigning action
, the compiler sees a possible leak with ARC. In the future, the LLVM compiler may allow you to suppress the warning. Until then, you can avoid the warning by using the runtime's objc_msgSend()
instead of -performSelector:
.
First, import the runtime message header
#import <objc/message.h>
Next, replace performSelector:
with objc_msgSend()
// [object performSelector:action];
objc_msgSend(object, action);
或者禁止warning
In the LLVM 3.0 compiler in Xcode 4.2 you can suppress the warning as follows:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[object performSelector:action];
#pragma clang diagnostic pop
Thanks to Scott Thompson (about this similar question: performSelector may cause a leak because its selector is unknown) for the answer.
分享到:
相关推荐
swift并没有提供performSelector ,我伪代码写了一个扩展类。使用时请小心。详见我博文说明。http://blog.csdn.net/fengsh998/article/details/35842441
[id someObject performSelector:@selector(aMethod:)]; ``` 这里的`aMethod:`是你要调用的方法名,冒号表示该方法接受一个参数。如果方法无参数,可以省略冒号。`performSelector`还支持延迟执行和带参数的调用,...
在Objective-C(简称OC)中,`performSelector`方法是基于消息传递机制的关键特性之一,它允许我们在运行时动态地调用对象的方法。这个特性使得OC具有高度的灵活性和动态性,是许多设计模式和编程实践的基础。接下来...
[self performSelector:@selector(lazyButtontouchDown) withObject:nil afterDelay:self.minimumPressDuration]; } -(void)lazyButtontouchDown { } //当离开按钮的时候取消所调用的方法 - (void)...
LRVariadicPerformSelector 因为有时候,我们需要使用两个以上的参数来执行选择器... 同样,这个简单的类别允许选择注入我们要在其上执行选择器的队列( ...用法[self lr_performSelector:@selector(because:sometimes:
前言 在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的方法。... [self performSelector:@selector(delayD
iOS WKWebView离线化加载H5资源解决方案 iOS WKWebView离线化加载H5资源解决方案是近年来移动应用开发中非常重要的一个话题。随着移动设备的普及,移动应用的发展也变得越来越快。然而,在加载H5资源时,往往会遇到...
[myObject performSelector:@selector(updateUI) afterDelay:2.0]; ``` 这将在2秒后调用`updateUI`方法。请注意,使用`performSelector`时需确保目标方法存在,否则可能导致程序崩溃。 **3. 动态方法解析与KVC/KVO*...
GCD(Grand Central Dispatch)是iOS中的多线程解决方案,有时我们会封装GCD宏以简化代码。例如,创建并执行一个同步队列任务: ```objc #define SYNCHRONOUS_DISPATCH(queue, block) dispatch_sync(queue, ^{ ...
在iOS开发中,有时我们需要延迟执行某个操作,这时可以使用`performSelector`方法来实现。然而,如果在延迟执行之前需要取消这个操作,就需要用到`cancelPreviousPerformRequestsWithTarget`方法。本文将深入探讨这...
GCD(Grand Central Dispatch)是Apple推出的一种强大的多线程解决方案,它提供了简单易用的接口来管理线程。本文主要探讨在iOS中使用GCD进行延迟执行的方法。 首先,iOS提供了两种常见的延时执行方式: 1. 调用`...
NSObject.performSelector(#selector(delayedAction), withObject: nil, afterDelay: 2.0) ``` 这将在2秒后调用`delayedAction`。此方法简单易用,但可能引发安全问题,如未声明的方法选择器或者在对象销毁后仍...
[(NSObject*)self performSelector:@selector(request:didUpdateStatus:) withObject:self withObject:status]; 应该是 [(NSObject*)self.delegate performSelector:@selector(request:didUpdateStatus:) with...
[a performSelector:selector withObject:nil]; ``` 在这里,我们使用`NSSelectorFromString()`将方法名转换为`SEL`(选择器),然后通过`performSelector:withObject:`来执行这个方法。 三、反射访问和序列化对象...
例如,`[anObject performSelector:@selector(aMethod)]` 将会调用`anObject`上的`aMethod`方法。这种动态调用方式是Objective-C的多态性核心。 1. **选择器定义**: - 在Objective-C中,你可以使用`@selector()`...
`Grand Central Dispatch (GCD)`是一种轻量级的多线程解决方案,提供了比`NSThread`和`NSOperation`更高效的线程管理机制。GCD通过队列(Queue)来管理任务的执行,分为全局队列和本地队列,支持同步和异步任务执行...
GCD是Apple提供的多线程解决方案,可以方便地实现延迟操作。使用GCD的 `dispatch_after` 函数可以在指定的延迟后执行代码块: ```objc dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * ...
在实际应用中,我们可能需要传递参数,如`[receiver performSelector:@selector(sendMessage:) withObject:@"Hello"]`或Swift的`receiver.perform(#selector(receiver.sendMessage(_:)), with: "Hello")`。...
[self performSelector:@selector(toggle:) withObject:btCont afterDelay:1.0f] ; #endif } #if TARGET_IPHONE_SIMULATOR #else - (void)toggle:(id)btCont { BOOL currentState = [btCont enabled] ; [btCont ...
每个线程都有自己的RunLoop,通过`performSelector:onThread:withObject:waitUntilDone:`方法可以在指定线程上执行某操作,确保操作在正确的上下文中执行。 总结一下,NSThread是Objective-C和Swift中处理多线程的...