接口回调VS委托代理

Android 接口回调

eg场景:Fragment 中数据变化Activity 跟随变化
Activity 文件

public class MainActivity extends FragmentActivity implements MainFragment.DataChangeListener {    
@Override        
protected void onCreate(Bundle savedInstanceState) {        
super.onCreate(savedInstanceState);        
setContentView(R.layout.activity_main);        
MainFragment fragment = new MainFragment();         
fragment.listener = this;        
FragmentManager fm = getSupportFragmentManager();         
fm.beginTransaction().add(R.id.fragment_container, fragment).commit();   
 }    
 @Override    
 public void changeData(String data) {       
 Log.d("activity 收到了监听 = ",data);   
 }
}

Fragment文件

public class MainFragment extends Fragment {  
DataChangeListener listener;    
@Nullable    
@Override    
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (listener != null) {            
listener.changeData("fragment data change");        
}        
return super.onCreateView(inflater, container,     savedInstanceState);    
}    
public interface DataChangeListener {        
public void changeData(String data);    
}
}

iOS 委托代理

eg场景:FoodsController 跳转到FoodsTypeController,选择分类后返回更新数据

FoodsViewController.m文件
#import "FoodsTypeViewController.h"
@interface FoodsViewController ()

@end

- (void) getFoodsTypeId:(NSString *) id
{
    NSLog(@" 选择的id = %@", id);
}

- (void) rightButtonClick:(UIButton *) sender
{
FoodsTypeViewController *foodsTypeVC = [[FoodsTypeViewController alloc] init];
foodsTypeVC.foodsTypeDelegate = self;
[self.navigationController pushViewController:foodsTypeVC animated:YES];
}

FoodsTypeViewController.h

@protocol FoodsTypeDelegate 

@optional
- (void) getFoodsTypeId:(NSString *) id;

@end

@interface FoodsTypeViewController : UIViewController
@property (nonatomic, weak) id  foodsTypeDelegate;
@end

FoodsTypeViewController.m

[self.foodsTypeDelegate getFoodsTypeId:@"3"];
[self.navigationController popViewControllerAnimated:YES];

你可能感兴趣的:(接口回调VS委托代理)