如果我把它放在viewDidLoad
中,它会起作用,但我无法想象这是最好的地方。我试着把它放在这里:
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// HERE
}
return self;
}
但那没用。我应该把它放在哪里?
在这个例子中,我正在谈论为这个类创建NSMutableArray(为其分配和启动它)。
答案 0 :(得分:1)
您有4种初始化方法:
- (id)init
- (id)initWithCoder:(NSCoder *)aDecoder
- (id)initWithStyle:(UITableViewStyle)style
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
这完全取决于你如何实例化这个类。
答案 1 :(得分:1)
您可以使用延迟加载技术,如评论中的A-Live建议,这样您的数组将在您实际需要时进行初始化。我们的想法是,在属性获取器中,首先检查您的阵列是否已初始化。如果没有,请初始化然后返回。
示例强>
注意:这是一个原始且未经测试的示例,您可能需要进行此操作 必要的更改取决于您是否使用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
答案 2 :(得分:0)
如果以编程方式创建控制器,则可以在initWithStyle:
初始化实例变量;如果是从nib / storyboard加载,则可以在initWithCoder:
/ awakeFromNib
中初始化实例变量。