使用NSSelectorFromString通过performSelector导致泄漏?

时间:2012-08-22 00:18:17

标签: objective-c ios

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

在我的实际游戏对象中,当需要提升关卡时,它会在关卡对象上调用一个方法:

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

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

...

如何解决此警告?

2 个答案:

答案 0 :(得分:3)

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

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

您可以取消此警告,但可以忽略

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

答案 1 :(得分:0)

警告是由编译器生成的,因为ARC需要知道该方法可能返回哪种对象,以确保不会对内存进行错误管理。

此处的更多详细信息:performSelector may cause a leak because its selector is unknown