我一直在研究一些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值。我也在这里得到覆盖警告。
所以我的问题是,如何在整个应用程序中访问该类实例,而不仅仅是在一个方法中?我正在使用基于视图的应用程序。
答案 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/