Я изучаю ObjectiveC и сталкивался с проблемой, связанной с самоанализом. В принципе, я перебираю массив объектов и определяю, принимают ли они переключатель lowercaseString
. Если они это сделают, я вызываю этот селектор объекта. После того, как я гарантирую, что объект отвечает на этот селектор, я вызываю его. Однако, когда я это делаю, я получаю это предупреждение: «предупреждение:« NSObject; может не отвечать на «-lowercaseString»Избавиться от «NSObject» может не отвечать на предупреждение «-Momeod»
Хотя код работает отлично, как написано, я бы не хотел получать предупреждение. Я предполагаю, что есть «правильный» способ убедиться, что я не получаю это предупреждение (т. Е. Не выключая предупреждения). Есть идеи?
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray addObject:@"Hello!"];
[myArray addObject:[NSURL URLWithString:@"http://apple.com"]];
[myArray addObject:[NSProcessInfo processInfo]];
[myArray addObject:[NSDictionary dictionary]];
SEL lowercaseSelector = @selector(lowercaseString);
for (NSObject *element in myArray) {
if ([element respondsToSelector:lowercaseSelector]) {
NSLog([element lowercaseString]); // Warning here
}
}
Кроме того, если у меня неправильная терминология «селектора», пожалуйста, исправьте меня. :) – Tyson
* Не * передавать непостоянные строки в NSLog. Существует риск для безопасности. Вы можете подумать, что в этом случае вы в безопасности, но не привыкните к этому. Вы неизбежно закончите это в случае, когда откроете дыру в безопасности. – kperryua
У вас есть ссылка на дополнительную информацию об этом бремени безопасности? Мне определенно интересно узнать больше об этом. – Tyson