gpt4 book ai didi

objective-c - Objective-C Controller 作为带有协议(protocol)的模型委托(delegate)?

转载 作者:行者123 更新时间:2023-12-01 18:27:50 26 4
gpt4 key购买 nike

将@protocol 添加到 Model 类并在 Controller 中实现它是一种很好的模式吗?

这是我用来在我的模型数据更改时发送消息以重新加载 UITableView 的代码,它是对象 c 编码的好方法吗?:

MyModel.h


@protocol myModelDelegate
{
(void) refreshTableView:(id) sender;
}
@end

@interface MyModel
{
@property (nonatomic,strong) (NSArray *) myData;
@property (nonatomic,weak) (id) <myModelDelegate> delegate;
}
@end

MyModel.m


@implementation MyModel

@synthesize myData=_myData;

- (NSArray*) myData {
if(!_myData) {
_myData= [[NSArray alloc] init];
}

return _myData;
}

- (void) setMyData: (NSArray*) myData
{
if (_myData != myData) {
_myData=myData;
[delegate refreshTableView:self];
}
}

@end

myDataController.h


...
@interface MyDataController: UITableViewController <myModelDelegate>
...

myDataController.m


@interface MyDataController()
@property (nonatomic,strong) (MyModel *) model;
@end

@implementation MyDataController

@synthesize model=_model;

-(MyModel *) model
{
if(!_model)
{
_model=[[MyModel alloc]init];
model.delegate=self;
}
return _model;
}
...
- (void) refreshTableView: (id) sender
{
[TableView reloadData];
}
...
@end

最佳答案

我认为这种设计没有任何问题。

我唯一要更改的是将委托(delegate)方法的签名更改为:

-(void)modelDidChange:(MyModel*)model;

这更符合您看到的关于委托(delegate)方法命名的最佳实践,并且还暗示了该方法的更广泛语义:模型将“发出信号”它已更改的事实;委托(delegate)将对此采取行动(即,如果是表,则刷新表;如果是持久性组件,则存储模型内容等)

关于objective-c - Objective-C Controller 作为带有协议(protocol)的模型委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com