2013-07-29 62 views
1

昨天我問了一個關於我的表視圖的問題,並將唯一的細節視圖鏈接到表視圖中的每個單元格。我相信我對我的問題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建議的人?

+0

你知道,我一直在編程,現在4年iOS的 - 在工作半打不同的大型應用。我還沒有需要使用單身。 –

+1

特別是,如果你有一個表格視圖,你必須有一個視圖控制器。該視圖控制器可以包含表格的數據(作爲委託)。單身人士不需要存儲表格數據。 –

+0

是的,我想避免使用單身人士,但我不知道如何做到這一點。基本上即時使用NSFetchedResultsController填充表視圖(鏈接到UIViewController子類)。每個單元格應在其詳細視圖中有一個計時器(由didSelectRowAtIndexPath產生)。顯然單身是確保多個計時器可以共存並通過將詳細視圖限制爲一個初始化來減少內存使用的最佳方式......更多信息請參閱OP – EvilAegis

回答

2

實現應用辛格爾頓是如下

頭文件

#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方法中。我們確保僅創建一次的方式是使用Grand Central Dispatch (GCD)中的dispatch_once method。這是線程安全的,完全由操作系統爲您處理,因此您不必擔心它。

使用辛格爾頓設定值

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

使用辛格爾頓拿到價值。

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

Further Reference and Reading

+0

你爲什麼不指通過OP [此頁](http://www.galloway.me.uk/tutorials/singleton-classes/)呢?順便說一下,你*閱讀*的問題呢? –

+1

@KhanhNguyen我曾經參考過鏈接,但大部分都是因爲這個而被低估。 :) – icodebuster

+0

感謝告訴我如何使一個單身人士,但我更感興趣,如果我是在正確的軌道上的鏈接中的人(在原來的職位)建議 – EvilAegis