iPhoneアプリケーションで作業します。ここでは、グローバルとして定義され、UITableViewControllerのViewDidLoadで初期化されたクラスインスタンスがあります。目的CクラスインスタンスのプロパティがUITableViewControllerで割り当て解除される
cellForRowAtIndexPathに到達すると、インスタンスプロパティは割り当て解除され、デバッガと同じように表示されます。
プロパティはデータベースからロードされています。
foo.hという
NSString *prop1;
@property(nonatomic, retain)NSString *prop1;
-(void)shouldLoadProperties;
Foo.m
@synthesize prop1;
-(void)shouldLoadProperties {
<FMDatabase stuff here>
FMResultSet *rs = [self executeQuery:sql];
prop1 = [rs stringForColumn:@"col1"]; //loads db value "Test" into prop1
}
テーブルビューコントローラ:
TestTableViewController.h
Foo *foo;
TestTableViewController.m
-(void)viewDidLoad {
foo = [[[Foo alloc] init] retain];
[foo shouldLoadProperties];
//Breakpoint here shows that foo.prop1 is set to "Test"
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//foo is is still allocated, but foo.prop1 has been
//deallocated; shows as <freed object>
NSLog(@"Prop 1 is %@", foo.prop1); //throws exception
}
私はFOOを解放していないよ、なぜプロパティは、自分自身を解放しますか?インスタンスが解放されるまで、Fooでプロパティにハングアップする何かが欠けていますか?
UPDATEは
私が発見したデータベースからプロパティを取り込むときのデータが保持していることを、保持して追加することにより:
prop1 = [[rs stringForColumn:@"col1"] retain];
が、これは正しいですか、私は他の何かが足りないのですか?
優れています。レスポンスありがとう! – jfuhr