2

我正在尝试为我的游戏的关卡类提供一个相当动态的 api……基本上,我只有一堆类方法 optionsForLevel1、optionsForLevel2、……等等,它们都返回一个字典对象,其中包含多少时间关卡应该有多少奖励积分,关卡名称等...

在我的实际游戏对象中,当需要升级关卡时,它会调用关卡对象上的一个方法,该方法执行以下操作:

+(NSDictionary*)performClassSelectorForLevel:(int)identifier {
    SEL sel = NSSelectorFromString([NSString stringWithFormat:@"optionsForLevel%d", identifier]);
    return [self performSelector:sel];
}

这给了我一个警告: PerformSelector 可能会导致泄漏,因为它的选择器是未知的。

...

如何解决此警告?

4

2 回答 2

2

这很有趣。你不能。不是我的经验。简单地说,这是一个警告,而不是错误,这“可能”导致泄漏。

使用performSelector:时确保它不会泄漏是您的责任,当然编译器不知道 中的选择器NSString,它在编译时是未知的,因为它将在运行时分配它的值。

您可以禁止显示此警告,但可以忽略

查看此答案以获取更多详细信息:PerformSelector 警告

于 2012-08-22T00:20:35.697 回答
0

警告是由编译器生成的,因为 ARC 需要知道该方法可能返回什么样的对象,以确保内存没有被错误管理。

此处有更多详细信息:performSelector 可能会导致泄漏,因为它的选择器是 unknown

于 2020-08-23T15:39:51.823 回答