gpt4 book ai didi

objective-c - 理解和编写单例类而不是使用委托(delegate)类

转载 作者:行者123 更新时间:2023-12-01 17:19:47 27 4
gpt4 key购买 nike

我是 iOS 编程的新手,我对单例类是什么以及为什么使用它非常感兴趣。我找到了一些信息,但它是模糊的。特别是我想把它应用到真实的例子中。我的项目使用 Facebook SDK,我想为我的 NSDictionary 创建包含好友列表的单例类。我的 .m 委托(delegate)文件:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//here is some other code

facebook = [[Facebook alloc] initWithAppId:@"my app id" andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

if (![facebook isSessionValid]) {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_location",
@"friends_location",
@"read_friendlists",
nil];
[facebook authorize:permissions];
[permissions release];
}
[facebook requestWithGraphPath:@"me/friends" andDelegate:(id)self];

//here is some other code
}

我设置为返回好友列表的请求的 NSDictionary 值:
- (void)request:(FBRequest *)request didLoad:(id)result {
_friendsDictionary = result;
}

我需要以哪种方式编写单例类而不使用委托(delegate)类 AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; .

最佳答案

单例是一个只在应用程序运行时实例化一次的类。它们通常采用管理器或工厂类的形式。当您想让对象始终存在于内存中时,它们会使用它们,通常我用于包含全局函数和变量的全局类,这些函数和变量在我的应用程序的许多地方都需要。

实现单例模式的最简单示例是这样的

在.h

#import <Foundation/Foundation.h>

@interface MySingleton : NSObject {

}
+(MySingleton*)sharedMySingleton;
-(void)sayHello;
@end


@implementation MySingleton
static MySingleton* _sharedMySingleton = nil;

+(MySingleton*)sharedMySingleton
{
@synchronized([MySingleton class])
{
if (!_sharedMySingleton)
[[self alloc] init];

return _sharedMySingleton;
}

return nil;
}


-(void)sayHello {
NSLog(@"Hello World!");
}
@end

因此,在您的项目中的任何类中,您只需导入这个类,然后像这样调用函数 [MySingleton sharedMySingleton] sayHello];
希望这会有所帮助。

关于objective-c - 理解和编写单例类而不是使用委托(delegate)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409415/

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