gpt4 book ai didi

ios - Objective-C method_exchangeImplementations 不工作

转载 作者:行者123 更新时间:2023-11-29 10:45:49 25 4
gpt4 key购买 nike

我正在尝试使用 objc 运行时库来交换方法实现。我有这个简单的例子,但它似乎不起作用(实现没有交换)。我忘记了什么?

    #import "AppDelegate.h"
#import "MainViewController.h"
#import <objc/runtime.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//lowercase NSString Method
Method originalMethod = class_getInstanceMethod([NSString class], @selector(lowercaseString));
//uppercase NSString Method
Method swappedMethod = class_getClassMethod([NSString class], @selector(uppercaseString));
//swap em
method_exchangeImplementations(swappedMethod, originalMethod);

NSLog(@"%@",[@"test" lowercaseString]); //OUTPUT: test !!
...
return YES;
}

最佳答案

-upperCaseString 是实例方法,不是类方法。所以你在这里打电话:

Method swappedMethod = class_getClassMethod([NSString class], @selector(uppercaseString));

可能返回 nil。我不确定当其中一个参数为 nil 时 method_exchangeImplementations 会做什么,但这可能不是您在任何情况下所希望的。

关于ios - Objective-C method_exchangeImplementations 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com