我在 XCode 4.6 中收到上述消息。我已经进行了非常彻底的搜索,但似乎没有什么与围绕我的问题的确切情况相匹配。诚然,我对 iOS 开发人员比较陌生,内存管理从来都不是我的强项,但这让我非常恼火。
我有一个实例变量theLink
,它在类中定义Game
如下:
@interface Game : NSObject
// Class objects
@property(nonatomic,retain) NSMutableArray *queryItems;
@property(nonatomic,retain) NSMutableArray *theArray;
@property(nonatomic,retain) NSString *theLink;
@property(nonatomic,retain) NSString *thePath;
theLink
在我的视图控制器makeGame
的方法中调用的方法中设置:initialiseGame
- (void) initialiseGame
{
bool gameCreated = FALSE;
while (!gameCreated)
{
gameCreated = [theGame makeGame:@"ptl"];
}
[loadingIndicator stopAnimating];
[loading setText:@"Tap to Start"];
[self performSelector:@selector(setLabels) withObject:nil afterDelay:0.0];
}
(注意:performSelector afterDelay 用于允许视图在继续之前更新。有点破解,但我想不出更好的方法!)
然后应用程序加载游戏,当用户点击屏幕开始时,视图控制器调用的下一个方法是:
- (void) setupLink
{
...
for(int i=0; i<[theGame.theLink length]; i++) {
...
}
}
正是在此参考上theGame.theLink
,我遇到了崩溃。
最让我困惑的是,如果我theGame.theLink
从方法内部调用initialiseGame
,它会正确显示,并且还会从Game
类中调用任何其他变量(例如thePath
或theArray
工作正常,所以theGame
对象没有被完全释放,只有变量theLink
.
在我看来,随着视图控制器的更新,该变量正在某处被释放。我还没有释放变量,也无法弄清楚为什么只有这个变量被释放。正如我一开始所说,内存管理不是我的强项!
任何帮助/想法将不胜感激。如果您需要更多详细信息,请告诉我。
非常感谢,安德鲁
编辑:设置theLink
范围内makeGame
- (bool) makeGame:(NSString*)gameType
{
...
[self getLink];
}
- (void) getLink
{
...
if (... && ((arc4random() % 10) > 8))
{
theLink = @"Animals";
}
}
theLink
根据随机数和其他因素,可以设置许多不同的方式。这是最基本的形式,只需将其设置为静态字符串。无论如何theLink
设置或设置为什么,程序总是在同一点崩溃。