- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我阅读了足够多的关于单例和委托(delegate)的信息。所以,我想我明白了什么是单例。关于授权,我仍然感到困惑。我理解委托(delegate)的概念,但我需要创建我的协议(protocol)来理解委托(delegate)。
好的,我创建了单例来处理我来自 CoreData 的实体。也许我错了,它不是单例,请告诉我。我的单例是 FetchData。
获取数据.h
#import <Foundation/Foundation.h>
@interface FetchData : NSObject <UIApplicationDelegate>
+(FetchData*) fetchData;
-(NSArray*)fetchLogin:(NSString*)name;
-(BOOL)newGroup:(NSString*)group forLogin:(NSString*)login;
-(NSMutableArray*)contactsForGroup:(NSString*)group;
-(BOOL)newContact:(NSString*)name surname:(NSString*)surname withDatas:(NSArray*)array;
//other methods
@end
获取数据.m
#import "FetchData.h"
#import "Contact.h"
#import "Login.h"
#import "Group.h"
#import "AppDelegate.h"
@interface FetchData ()
@property (nonatomic, strong) NSEntityDescription *loginEntity;
@property (nonatomic, strong) NSEntityDescription* groupEntity;
@property (nonatomic, strong) NSManagedObjectContext* context;
@property (nonatomic, strong) NSEntityDescription* contactEntity;
@property (nonatomic, strong) AppDelegate* appDelegate;
//other properties
@end
@implementation FetchData
@synthesize //my properties
+(FetchData*) fetchData
{
static FetchData* fetchData = nil;
if (!fetchData)
fetchData = [[super allocWithZone:nil]init];
return fetchData;
}
+(id)allocWithZone:(NSZone *)zone
{
return [self fetchData];
}
//implementation my methods
@end
因此,现在对我来说使用 CoreData 非常容易。我只需要导入 FetchData 并简单地使用创建/删除/更改/添加/排序的方法...
一些类.m
#import "FetchData.h"
#define fetching [FetchData fetchData]
但我认为我可以将其用于我的目标委托(delegate)。或者,与单例相比,这可能是最好的决定。所以我想为委托(delegate)重做单例。我需要帮助解决这个问题。我必须做什么?
如果我理解正确,我需要使用 FetchData.h、FetchData.m 中的所有方法创建协议(protocol),我可以不做任何更改就离开。在 SomeClass 中,我需要导入 FetchData 并添加我的协议(protocol)。喜欢:
#import <Foundation/Foundation.h>
@protocol FetchingDelegate
//all methods from FetchData.h
@end
@interface FetchData : NSObject
@property (nonatomic, strong) id <FetchingDelegate> delegate;
@end
获取数据.m
@interface FetchData()
//all properties without changing
@end
@implementation FetchData
@synthesize //all properties and delegate
//implementation of methods
@end
一些类
#import "FetchData.h"
@interface SomeClass : NSObject <FetchingDelegate>
@end
@implementation SomeClass
-(void)viewDidLoad
{
FetchData* fetching = [FetchData new]
fetching.delegate = self
}
//and now I can use any methods from protocol like [fetching anyMethod]
//such I used with singleton
最佳答案
单例的想法是您的整个应用程序都可以访问这个类。多个 View Controller 可能需要来自您的数据库的数据。对于您的情况,我会更改您的 fetchData
方法(并且可能会更改其名称,因为它现在并不真正遵循约定):
+(FetchData*) fetchData
{
static FetchData *fetchData;
dispatch_once_t token;
dispatch_once(&token, ^{
if (!fetchData)
fetchData = [super init];
}
return fetchData;
}
委托(delegate)用于一对一的通信,这意味着一个对象有一个委托(delegate)并将任何消息发送给该特定委托(delegate)。
这意味着单例和委托(delegate)不能很好地结合在一起。单例用于向多个接收者发送消息,而委托(delegate)模式用于一对一通信。所以你有两个选择:你可以不使用单例并使用委托(delegate)模式,或者你可以使用单例并使用 NSNotificationCenter
通知观察者更改。
关于ios - 单例和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14734568/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!