私はObjectiveCを学習しており、イントロスペクションに関する問題に遭遇しました。基本的には、オブジェクトの配列をループして、lowercaseString
セレクタを受け入れるかどうかを判断しています。もしそうであれば、私はオブジェクトのセレクタを呼び出します。オブジェクトがそのセレクタに応答したことを確認したら、それを呼び出します。 "警告: 'NSObject;' -lowercaseString 'に応答しない可能性があります。"NSObject"が '-someMethod'に応答しない可能性があります警告:
コードは書かれているようにうまく動作しますが、私は警告を受け取りたくありません。警告が表示されないようにする(つまり警告をオフにすることなく)「正しい」方法があると仮定しています。何か案は?
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