我在哪里实例化我的课程,以便我可以在整个应用程序中访问它?

时间:2011-03-20 05:17:30

标签: iphone objective-c ios4

我一直在研究一些Objective-c / iOS开发书籍,我遇到了绊脚石。我觉得我在这里失去了一些愚蠢的东西,所以我相信你们可以提供帮助,因为你们都非常聪明:-)。

我有一个非常简单的应用程序,包含1个按钮和1个标签。按下按钮会在标签中显示一条消息。我创建了一个包含创建所述消息的方法的类。这是问题所在:

#import "classTestViewController.h"

@implementation classTestViewController
@synthesize myLabel;

- (void)viewDidLoad
{


}

-(IBAction) pressGo:(id)sender{

    MyClass * classTester = [[MyClass alloc] init];
    classTester.count = 15;
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText;
}
- (void)dealloc
{
    [classTester release];
    [myLabel release];
    [super dealloc];
}

这个应用程序的输出,在我的标签中,是“Yay 15”。所以你可以看到问题,我能让它工作的唯一方法就是在“pressGo”方法中实例化那里的类。这是不可取的,因为另一种方法无法访问或更改类变量计数。另外,我得到一个警告,即classTester的本地声明隐藏了实例变量。如果我将类实例化移动到viewDidLoad方法,这似乎是正确的,其他方法就不能再访问它了。

#import“classTestViewController.h”

@implementation classTestViewController
@synthesize myLabel;

- (void)viewDidLoad
{
   MyClass * classTester = [[MyClass alloc] init];


}

-(IBAction) pressGo:(id)sender{

    classTester.count = 15;
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText;
}
- (void)dealloc
{
    [classTester release];
    [myLabel release];
    [super dealloc];
}

那是nada的输出。例如,如果我尝试访问一个变量classTester.count,即使在设置它之后,我得到一个0值。我也在这里得到覆盖警告。

所以我的问题是,如何在整个应用程序中访问该类实例,而不仅仅是在一个方法中?我正在使用基于视图的应用程序。

2 个答案:

答案 0 :(得分:3)

使用以下命令在接口文件中声明classTester

@class MyClass
@interface classTestViewController : UIViewController
{
    MyClass *classTester;
}
// Any other custom stuff here
@end

然后使用:

在viewDidLoad方法中实例化它
classTester = [[MyClass alloc] init];

您应该可以从此课程中的任何方法访问ivar。如果您希望整个应用都可以访问它,@ Waqas链接将为您指明正确的方向。

答案 1 :(得分:2)

您需要创建一个实例化一次且在整个项目中可用的单例类

看看

http://projectcocoa.com/2009/10/26/objective-c-singleton-class-template/