gpt4 book ai didi

ios - NSInvocation 和内存问题

转载 作者:可可西里 更新时间:2023-11-01 03:09:03 31 4
gpt4 key购买 nike

<分区>

所以我来自 Java 世界,在那里我们对内存管理问题一无所知。在大多数情况下,ARC 拯救了我的屁股,但这里有一些让我难过的东西。基本上我正在使用 NSInvocations 做一些事情,在我进行以下代码修改之前我遇到了一些讨厌的内存问题。自从我做了这些修改后,内存崩溃就消失了,但我通常非常害怕我不理解的代码。我这样做对吗?

之前:各种内存问题:

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[target class] instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:target];
[invocation setArgument:&data atIndex:2];
[invocation setArgument:&arg atIndex:3];
[invocation invoke];

NSString *returnValue;
[invocation getReturnValue:&returnValue];

之后:没有内存问题,但我不确定我做对了:

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[target class] instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:target];
[invocation setArgument:&data atIndex:2];
[invocation setArgument:&arg atIndex:3];
[invocation invoke];

CFTypeRef result;
[invocation getReturnValue:&result];

if (result)
CFRetain(result);

NSString *returnValue = (__bridge_transfer NSString *)result;

编辑:

我只是想在下面的答案的基础上添加,我使用了 objc_msgSend,因此。:

NSString * returnValue = objc_msgSend(target, selector, data, arg);

它解决了所有内存问题,而且看起来更简单。如果您发现任何问题,请发表评论。

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