2012-10-27 101 views

回答

2

你可以使用單身模式,檢查這個question

像這樣:

+(MySingleton *)sharedInstance { 
    static dispatch_once_t pred; 
    static MySingleton *shared = nil; 
    dispatch_once(&pred, ^{ 
     shared = [[MySingleton alloc] init]; 
     shared.someIvar = @"blah"; 
    }); 
    return shared; 
} 

或者,如果你想只接入方式,你可以使用工廠方法(那些+,不 - )

@interface MyClass 
@property (nonatomic, assign) NSInteger value; 

+ (void) factoryMethod; 
- (void) instanceMethod; 

... 
// then in code 
[MyClass factoryMethod]; // ok 
[[MyClass sharedInstance] instanceMethod]; // ok 
[MyClass sharedInstance].value = 5; // ok 

UPDATE:

您可以添加屬性到appDelegate

// in your app delegate.h 
@property (nonatomic, retain) UIViewController* view; 
// in your app delegate.m 
@synthesize view; 

,並從像幾乎任何地方得到appDelegate

myapp_AppDelegate* appDelegate = [[UIApplication sharedApplicaton] delegate]; 
appDelegate.view = ...; // set that property and use it anywhere like this 

注意,那你需要#import您的UIViewController子類和你appDelegate.h進行自動完成工作,有時避免警告。

// someFile.m 
#import "appDelegate.h" 
#import "myViewController.h" 
... 
myapp_AppDelegate* appDelegate = [[UIApplication sharedApplicaton] delegate]; 
appDelegate.view.myLabel.text = @"label text";  
+0

我已經寫了我的課並且已經分配了,但是我只能在分配它的地方使用它...有沒有辦法將它用於全局變量?就像我在.h中寫入一樣.h –

+0

UIViewController * view; –

+0

無論如何,你需要以某種方式存儲它的指針。也許你可以添加一個屬性到你的AppDelegate或者創建一個單例類(就像在我的答案中一樣)並在那裏添加那個指針。 –

3

要麼你可以使用singleton,或者如果您打算只使用靜態方法,你可以將其添加在課堂上,並直接與類名使用它。

創建方法爲靜態,

+(void)method; 

然後用它作爲,

[MyClass method]; 

,這是很有幫助僅當您創建它只有像處理圖像或一些實用方法的一些工具類所以。如果你需要有屬性變量,你將需要singleton

對於如: -

轉到新的文件,並創建MySingleton類,這將創造MySingleton.hMySingleton.m文件。

在.h文件中,

@interface MySingleton : NSObject 
{ 
UIViewController *myview; 
} 

@property (nonatomic, retain) UIViewController *myview; 

+(MySingleton *)sharedSingleton; 

在.m文件,

+ (MySingleton*)sharedSingleton { 
    static MySingleton* _one = nil; 

    @synchronized(self) { 
     if(_one == nil) { 
      _one = [[ MySingleton alloc ] init ]; 
     } 
    } 

    return _one; 
} 

- (UIViewController *)myview { 
    if (!myview) { 
    self.myview = [[[UIViewController alloc] init] autorelease]; //you can skip this, but in that case you need to allocate and initialize the first time you are using this. 
    } 
    return myview; 
} 

然後把它作爲,

[[MySingleton sharedSingleton] myview]項目中的任何地方。請記得導入MySingleton.h。同樣,你可以在單例中創建任何對象並使用它。只需相應地實現getter或setter方法即可。

有一件事你必須要小心的是,在單例中創建的對象只有一個內存空間分配,因此它是同一個對象,每當你在你的項目中的任何地方使用。以上代碼不會在課程中創建myview對象的多個副本。所以無論何時你修改一個將被反射到處的屬性myview。只有在絕對需要時才使用此方法,並且您需要從整個項目中訪問單個對象。通常我們只用於存儲sessionID等需要從不同類訪問的情況。

+0

如何從這種實現中訪問textview? –

+1

我已經更新了我的答案並回答了這個問題。此外,爲什麼你想像這樣使用textview而不是創建爲局部變量?任何特定的原因? – iDev