Ios 如果我有一个UITableViewController类,我在哪里初始化它的实例变量?

Ios 如果我有一个UITableViewController类,我在哪里初始化它的实例变量?,ios,objective-c,xcode,ios5,ios6,Ios,Objective C,Xcode,Ios5,Ios6,如果我把它放在viewDidLoad中,它会工作,但我无法想象那是最好的地方。我试着把它放在这里: - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // HERE } return self; } 但那没用。我应该把它放在哪里 在本例中,我讨论的是为此类创建NSMutableArray(alloc并初始化它)

如果我把它放在
viewDidLoad
中,它会工作,但我无法想象那是最好的地方。我试着把它放在这里:

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // HERE
    }
    return self;
}
但那没用。我应该把它放在哪里


在本例中,我讨论的是为此类创建NSMutableArray(alloc并初始化它)。

您有4种初始化方法:

- (id)init
- (id)initWithCoder:(NSCoder *)aDecoder 
- (id)initWithStyle:(UITableViewStyle)style
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

这一切都取决于你如何实例化这个类。

如果你创建了你的控制器程序,你可以在
initWithStyle:
中初始化你的实例变量;如果它是从nib/故事板加载的,你可以在
initWithCoder:
中初始化它。

你可以按照a-Live的建议使用延迟加载技术在注释中,以便在实际需要时初始化数组。其思想是,在属性getter中,首先检查数组是否已初始化。如果没有,初始化然后返回它

示例

注意:这是一个粗糙且未经测试的示例,您可能需要 必要的更改取决于是否使用ARC

MyViewController.h

@interface MyViewController : UITableViewController
{
    NSArray *_myArray;
}
@property (nonatomic, readonly) NSArray *myArray;
-(void)doSomething;
@end
MyViewController.m

@interface MyViewController()
-(NSArray *)fetchArrayData;
@end

@implementation MyViewController

@synthesize myArray = _myArray;

#pragma mark - Property Getter
-(NSArray *)myArray
{
    if (_myArray==nil)
        _myArray = [[self fetchArrayData] retain];
    return _myArray;
}
#pragma mark - Cleanup
-(void)dealloc
{
    [_myArray release];
    [super dealloc];
}
#pragma mark - Instance Methods
-(void)doSomething
{
    NSLog(@"myArray: %@", self.myArray);
}

#pragma mark - Private Methods
-(NSArray *)fetchArrayData
{
    NSArray *arrayData = [NSArray arrayWithObjects:@"Apples", @"Oranges", nil];
    return arrayData;
}
@end

如何创建此类的实例?您是在故事板/nib中还是从代码中执行此操作?哪些实例变量?如果你需要帮助,你需要提供一些有用的信息。对不起,我会在问题中澄清。假设我有一个NSMutableArray,我需要alloc init,我在哪里做呢?这个类是初始视图控制器,所以它是自动创建的。考虑在GETTER中使用惰性初始化,这将是一个与初始化无关的通用解决方案。