代碼: ...
代碼:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title=@"performSelector";
//performSelector是運行時系統負責去找函數/方法的,在編譯時候不做任何校驗;但是直接調用肯定在編譯是會校驗。如果函數不存在,那麼直接調用 在編譯時候就能夠發現(藉助Xcode可以寫完就發現),但是使用performSelector的話一定是在運行時候才能發現(此時程式崩潰)
//Cocoa支持在運行時 向某個類添加方法(應該極少人用到, 即方法編譯時不存在,但是運行時候存在,這時候必然需要使用performSelector去調用)
/*直接調用方法時候,一定要在頭文件中聲明該方法,使用時候,也要將頭文件import進來
而使用performSelector時候, 可以不用import頭文件,對包含方法的 對象 調用performSelector即可*/
// 沒有參數
BOOL isNoParam= [self respondsToSelector:@selector(methodNoParam)];
if (isNoParam) {
[self performSelector:@selector(methodNoParam)];
}
// 一個參數
BOOL isOneParam= [self respondsToSelector:@selector(methodWithOneParam:)];
if (isOneParam) {
[self performSelector:@selector(methodWithOneParam:) withObject:@"firsht"];
}
// 二個參數
BOOL isParams= [self respondsToSelector:@selector(methodWithParams: andParamSecond:)];
if (isParams) {
[self performSelector:@selector(methodWithParams: andParamSecond:) withObject:@"first" withObject:@"second"];
}
}
#pragma -mark -perform
- (void)methodNoParam{
NSLog(@"methodNoParam");
}
- (void)methodWithOneParam:(id)paramFirst{
NSLog(@"methodWithOneParam: %@", paramFirst);
}
- (void)methodWithParams:(id)paramFirst andParamSecond:(id) paramSecond{
NSLog(@"methodWithOneParam: %@,%@", paramFirst,paramSecond);
}