`

"performSelector may cause a leak because its selector is unknown"解决方案

    博客分类:
  • ios
 
阅读更多

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

    swift并没有提供performSelector ,我伪代码写了一个扩展类。使用时请小心。详见我博文说明。http://blog.csdn.net/fengsh998/article/details/35842441

    ios demo,performSelector和respondsToSelector

    [id someObject performSelector:@selector(aMethod:)]; ``` 这里的`aMethod:`是你要调用的方法名,冒号表示该方法接受一个参数。如果方法无参数,可以省略冒号。`performSelector`还支持延迟执行和带参数的调用,...

    OC-performSelector

    在Objective-C(简称OC)中,`performSelector`方法是基于消息传递机制的关键特性之一,它允许我们在运行时动态地调用对象的方法。这个特性使得OC具有高度的灵活性和动态性,是许多设计模式和编程实践的基础。接下来...

    iOS长按按钮

    [self performSelector:@selector(lazyButtontouchDown) withObject:nil afterDelay:self.minimumPressDuration]; } -(void)lazyButtontouchDown { } //当离开按钮的时候取消所调用的方法 - (void)...

    LRVariadicPerformSelector:简单的NSObject类别,可使用可变参数执行选择器

    LRVariadicPerformSelector 因为有时候,我们需要使用两个以上的参数来执行选择器... 同样,这个简单的类别允许选择注入我们要在其上执行选择器的队列( ...用法[self lr_performSelector:@selector(because:sometimes:

    iOS中延时执行的几种方式比较及汇总

    前言 在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行。本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的方法。... [self performSelector:@selector(delayD

    ios wkwebview离线化加载h5资源解决方案

    iOS WKWebView离线化加载H5资源解决方案 iOS WKWebView离线化加载H5资源解决方案是近年来移动应用开发中非常重要的一个话题。随着移动设备的普及,移动应用的发展也变得越来越快。然而,在加载H5资源时,往往会遇到...

    objective c 消息 objc_msgSend

    [myObject performSelector:@selector(updateUI) afterDelay:2.0]; ``` 这将在2秒后调用`updateUI`方法。请注意,使用`performSelector`时需确保目标方法存在,否则可能导致程序崩溃。 **3. 动态方法解析与KVC/KVO*...

    iOS中常用的宏定义总结

    GCD(Grand Central Dispatch)是iOS中的多线程解决方案,有时我们会封装GCD宏以简化代码。例如,创建并执行一个同步队列任务: ```objc #define SYNCHRONOUS_DISPATCH(queue, block) dispatch_sync(queue, ^{ ...

    TestForCancelPrePerformReq.zip

    在iOS开发中,有时我们需要延迟执行某个操作,这时可以使用`performSelector`方法来实现。然而,如果在延迟执行之前需要取消这个操作,就需要用到`cancelPreviousPerformRequestsWithTarget`方法。本文将深入探讨这...

    IOS多线程之GCD(3) - iOS知识库1

    GCD(Grand Central Dispatch)是Apple推出的一种强大的多线程解决方案,它提供了简单易用的接口来管理线程。本文主要探讨在iOS中使用GCD进行延迟执行的方法。 首先,iOS提供了两种常见的延时执行方式: 1. 调用`...

    DelayTest.zip

    NSObject.performSelector(#selector(delayedAction), withObject: nil, afterDelay: 2.0) ``` 这将在2秒后调用`delayedAction`。此方法简单易用,但可能引发安全问题,如未声明的方法选择器或者在对象销毁后仍...

    ftp客户端 ios的库

    [(NSObject*)self performSelector:@selector(request:didUpdateStatus:) withObject:self withObject:status]; 应该是 [(NSObject*)self.delegate performSelector:@selector(request:didUpdateStatus:) with...

    ios反射机制

    [a performSelector:selector withObject:nil]; ``` 在这里,我们使用`NSSelectorFromString()`将方法名转换为`SEL`(选择器),然后通过`performSelector:withObject:`来执行这个方法。 三、反射访问和序列化对象...

    ios-简单选择器.zip

    例如,`[anObject performSelector:@selector(aMethod)]` 将会调用`anObject`上的`aMethod`方法。这种动态调用方式是Objective-C的多态性核心。 1. **选择器定义**: - 在Objective-C中,你可以使用`@selector()`...

    iOS多线程简单介绍

    `Grand Central Dispatch (GCD)`是一种轻量级的多线程解决方案,提供了比`NSThread`和`NSOperation`更高效的线程管理机制。GCD通过队列(Queue)来管理任务的执行,分为全局队列和本地队列,支持同步和异步任务执行...

    iOS 延迟加载

    GCD是Apple提供的多线程解决方案,可以方便地实现延迟操作。使用GCD的 `dispatch_after` 函数可以在指定的延迟后执行代码块: ```objc dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * ...

    ios-一句代码条用一,二,三级选择器.zip

    在实际应用中,我们可能需要传递参数,如`[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 ...

    NSThread线程交互

    每个线程都有自己的RunLoop,通过`performSelector:onThread:withObject:waitUntilDone:`方法可以在指定线程上执行某操作,确保操作在正确的上下文中执行。 总结一下,NSThread是Objective-C和Swift中处理多线程的...

Global site tag (gtag.js) - Google Analytics