0

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

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // HERE
    }
    return self;
}

但这没有用。我应该把它放在哪里?

在这个例子中,我正在谈论为这个类创建 NSMutableArray(分配并初始化它)。

4

3 回答 3

1

您有 4 种初始化方法:

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

这完全取决于您如何实例化该类。

于 2013-03-19T18:29:28.143 回答
1

您可以使用 A-Live 在评论中建议的延迟加载技术,这样您的数组将在您实际需要时被初始化。这个想法是,在属性 getter 中,您首先检查您的数组是否已初始化。如果没有,初始化然后返回它。

例子

注意:这是一个粗略且未经测试的示例,您可能需要根据是否使用 ARC 进行必要的更改。

MyViewController.h

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

我的视图控制器.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
于 2013-03-19T18:47:31.430 回答
0

initWithStyle:如果您以编程方式创建控制器,或者initWithCoder:如果awakeFromNib它是从 nib/storyboard 加载的,则可以在 in 中初始化您的实例变量。

于 2013-03-19T18:29:56.363 回答