动态加载实例NSSelectorFromString
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _dataArray = [NSMutableArray array]; //不带参数的方法 // [_dataArray addObject:@[@"第一行",@"load1"]]; // [_dataArray addObject:@[@"第二行",@"load2"]]; //带有参数的方法,带几个参数就添加几个 : [_dataArray addObject:@[@"第一行",@"load1::"]]; [_dataArray addObject:@[@"第二行",@"load2::"]]; _mytableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, 375, 500) style:UITableViewStylePlain]; _mytableview.dataSource = self; _mytableview.delegate = self; [self.view addSubview:_mytableview]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return _dataArray.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cells = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cells]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cells]; } NSArray *arr = _dataArray[indexPath.row]; cell.textLabel.text = arr[0]; return cell; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 50; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; SEL funSel = NSSelectorFromString(self.dataArray[indexPath.row][1]); if (funSel) { //以下代码作用是 忽略警告 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:funSel withObject:@"4" withObject:@"5"]; #pragma clang diagnostic pop } } //不带参数的书写方法 -(void)load1{ NSLog(@"1"); } -(void)load2{ NSLog(@"2"); } //带有参数的方法 注意第二个参数的书写方法 -(void)load1:(NSString *)str :(NSString *)str2{ NSLog(@"1%@%@",str,str2); } -(void)load2:(NSString *)str :(NSString *)str2{ NSLog(@"2%@%@",str,str2); }
以上即为动态加载实例的方法,使用起来非常方便,节省代码量