gpt4 book ai didi

iphone - 我的单例走在正确的轨道上吗?

转载 作者:行者123 更新时间:2023-11-29 10:56:47 26 4
gpt4 key购买 nike

我昨天问了一个关于我的表格 View 以及将唯一的详细 View 链接到表格 View 中的每个单元格的问题。我相信我的问题得到了很好的回答 here . (希望你能阅读那篇文章,看看我需要什么)。基本上我想知道我是否正确地制作了我的单例。这是我的代码:

timerStore.h

#import "Tasks.h"
@interface timerStore : NSObject
{
NSMutableDictionary *allItems;
}
+(timerStore *)sharedStore;
-(NSDictionary *)allItems;
-(NSTimer *)createTimerFor:(Tasks *)t inLocation: (NSIndexPath *)indexPath;
-(void)timerAction;
@end

timerStore.m

@implementation timerStore

+(timerStore *)sharedStore{
static timerStore *sharedStore = nil;
if (!sharedStore)
sharedStore = [[super allocWithZone:nil]init];
return sharedStore;
}
+(id)allocWithZone:(NSZone *)zone{
return [self sharedStore];
}
-(id)init {
self = [super init];
if (self) {
allItems = [[NSMutableDictionary alloc]init];
}
return self;
}
-(NSDictionary *)allItems{
return allItems;
}
-(NSTimer *)createTimerFor:(Tasks *)t inLocation: (NSIndexPath *)indexPath {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:t.timeInterval target:self selector:@selector(timerAction) userInfo:nil repeats:1.0];
[allItems setObject:timer forKey:indexPath];
return timer;
}
-(void)timerAction{
//custom properties here
}
@end

我有点困惑,因为我的印象是,当您向下滚动(出列)时,单元格的索引路径会被回收。不过我可能错了。无论如何,我是否正在以正确的方式制作单例作为 link 中的那个人?建议?

最佳答案

App Singleton最好的实现方式如下

头文件

#import <Foundation/Foundation.h>

@interface AppSingleton : NSObject

@property (nonatomic, retain) NSString *username;

+ (AppSingleton *)sharedInstance;

@end

执行文件

#import "AppSingleton.h"

@implementation AppSingleton
@synthesize username;

+ (AppSingleton *)sharedInstance {
static AppSingleton *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}

// Initializing
- (id)init {
if (self = [super init]) {
username = [[NSString alloc] init];
}
return self;
}

@end

注意:它的作用是定义一个名为 sharedInstance 的静态变量(但仅对 translation unit 是全局的)然后在 sharedInstance初始化一次且仅一次方法。我们确保它只创建一次的方法是使用 dispatch_once method来自 Grand Central Dispatch (GCD) .这是线程安全的,完全由操作系统为您处理,因此您根本不必担心。

使用单例设置值

[[AppSingleton sharedInstance] setUsername:@"codebuster"];

使用单例获取值(value)。

NSString *username = [[AppSingleton sharedInstance] username];

Further Reference and Reading

关于iphone - 我的单例走在正确的轨道上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17915701/

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