Ste*_*eve 1 iphone xcode static-analysis memory-management objective-c
这是我制作一些闪存卡的对象.第一种方法(我省略了主要部分)使用传入的运算符生成一个Card对象的NSMutabaleArray并且工作正常.第二种方法,"drawFromDeck"从我的视图控制器调用Deck对象,也可以正常工作,但静态分析器说我可能正在泄漏一个对象.
这是代码.
#import "Deck.h"
@class Deck;
@implementation Deck
@synthesize cards;
- (id)initDeckWithOperator: (NSString*)mathOper {
...
return self;
}
- (id)drawFromDeck {
int index = random() % [cards count];
Card* selectedCard = [[cards objectAtIndex:index] retain];
[cards removeObjectAtIndex:index];
return selectedCard;
}
@end
Run Code Online (Sandbox Code Playgroud)
是的,你正在泄漏一个物体.你应该
return [selectedCard autorelease];
Run Code Online (Sandbox Code Playgroud)
其原因是你-retain编的selectedCard,所以你有责任-release吧.但是您无法使用,-release因为它必须在函数结束后有效,因此您需要使用-autorelease将所有权转移到自动释放池.
当然,调用方法-drawFromDeck不应该是-release它的返回值.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |