我有一个很大的疑问:
我在这样的课程中有我的职能:
-(Shot*) getShot:(int)shot {
NSString *sqlStr = [NSString stringWithFormat:@"SELECT * FROM tbShots where nShot = %d ", shot];
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *documentFolderPath = [searchPaths objectAtIndex:0];
NSString *dbFilePath = [documentFolderPath stringByAppendingPathComponent:DATABASE_NAME_EXT];
if (dbFilePath == NULL) {
NSLog(@"dbFilePath is NULL");
}
sqlite3 *dbHandle;
if (sqlite3_open([dbFilePath UTF8String], &dbHandle)) {
NSLog(@"sqlite3_open: failed");
}
sqlite3_stmt *preparedStatement;
const char* queryStatement = [sqlStr UTF8String];
sqlite3_prepare_v2(dbHandle, queryStatement, -1, &preparedStatement, NULL);
Shot *s = nil;
NSString * note = @"";
while( sqlite3_step(preparedStatement) == SQLITE_ROW)
{
s = [[Shot alloc] initWithShot:shot];
}
sqlite3_finalize(preparedStatement);
sqlite3_close(dbHandle);
return s;
}
在本课程之外,我使用以下代码:
Shot* sP = [appDelegate getShot:nTarget];
[self drawShoot:sP];
但是我认为这不是检索对象实例并使用它的正确方法...
最好的方法是什么???
还使用实例sP之后,我需要释放吗?如果释放操作也会影响appDelegate类?
谢谢
最佳答案
s = [[[Shot alloc] initWithShot:shot];
使它成为[[[Shot alloc] initWithShot:shot] autorelease]的自动发布对象;然后您的方法返回自动释放的对象。
Shot * sP = [appDelegate getShot:nTarget];
[self drawShoot:sP];
那应该很好否则,当返回s时,在Shot对象“ s”上保留的保留计数为1;用你的方法。