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 がコメントで提案しているように、遅延読み込み手法を使用して、実際に必要なときに配列が初期化されるようにすることができます。プロパティ ゲッターでは、最初に配列が初期化されているかどうかを確認します。そうでない場合は、初期化してから返します。

注: これは大雑把でテストされていない例であり、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
于 2013-03-19T18:47:31.430 に答える
0

initWithStyle:コントローラーをプログラムで作成する場合、またはnib/storyboard からロードする場合はinitWithCoder:/でインスタンス変数を初期化できます。awakeFromNib

于 2013-03-19T18:29:56.363 に答える