Iphone 类的全局实例

Iphone 类的全局实例,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我试图使一个类的实例在.m文件的所有方法中都可用。不要在每个方法中都这样做: -(void)viewDidLoad { Class *c = [Class new]; } 我在.h文件中的尝试: @interface RandomViewController : UIViewController { Class *c [Class new]; } 但它不起作用,我有错误 期望“;”在申报表末尾 我怎样才能做到这一点 感谢.h文件中的: @interface RandomVie

我试图使一个类的实例在.m文件的所有方法中都可用。不要在每个方法中都这样做:

-(void)viewDidLoad
{
    Class *c = [Class new];
}
我在.h文件中的尝试:

@interface RandomViewController : UIViewController
{
    Class *c [Class new];
}
但它不起作用,我有错误

期望“;”在申报表末尾

我怎样才能做到这一点

感谢.h文件中的:

@interface RandomViewController : UIViewController
{
    Class *c;
}
在.m文件中:

-(void)viewDidLoad
{
    c = [[Class alloc] init];
}

它对类方法有什么作用?如果退货无效:

Class.h文件:

@interface Class: NSObject
{
}
- (void)new;
随机视图控制器

@interface RandomViewController : UIViewController
    {
        Class *c;
    }
RandomViewController.m文件

-(void)viewDidLoad
{
    c = [[Class alloc] init];  
    //call the method
    [c new];
}

创建一个实例变量,并在指定的初始值设定项中进行设置。下面是一个示例
@实现

@implementation RandomViewController {
    // Instance variable names should start with an underscore, by convention.
    Class *_c;
}

...

// Designated initializer for UIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        _c = [[Class alloc] init];
    }
    return self;
}

...

- (void)someMethodThatNeedsAClassInstance
{
    [_c doSomething];
}
如果不使用ARC,则需要将
[\u c release]
添加到
dealloc
实现中


现在,在类中的每个方法中,您都可以引用
\u c
,并获得在初始值设定项中创建的实例。作为旁注,这并不是一个真正的“全局”实例——它是每个对象的实例。您创建的每个视图控制器都有自己的
\u c
实例。另外,一种更好的方法是声明一个实例变量,而不必麻烦地声明一个实例变量。

通常您会在init例程中执行此操作。但是您仍然必须在.h中有一个声明。您知道
是Objective-C中的一种类型,对吗?这似乎不正确-您不会在视图控制器的标题中声明
新的
,而是在
的标题中。而且,据我所知,“新”是创建类实例的另一种方式。相似[[Class alloc]init];为什么在initializer方法中执行此操作比在viewDidLoad方法中使用其他答案更好?另外,您声明一个属性是什么意思?比如“@property(非原子,强)类*\u c;”这会更好吗?ViewDidLoad可以在视图控制器的生命周期内多次调用,因此可以避免不必要的重新分配。在旧版本的iOS和pre-ARC上,减少dealloc和viewDidUnload中的重复清理更为重要?感谢所有的回复:)拥有一个属性是更干净的代码IMO以及通过访问器对ivar进行所有更改有一些好处,预ARC更为重要,但如果您需要在将来某个时间手动发出KVO通知,或者对IVAR进行更改会产生一些额外的副作用,那么如果您始终使用该属性,则不会有太多代码需要更改。