2012-10-27 32 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