我一個類的方法是這樣的:忽略保留屬性,類方法
+(CCScene *) sceneWithMovie:(NSString*)movieName level:(NSString*)levelName hudLevel:(NSString*)hudName
{
bbsScene* scene = (bbsScene*)[super sceneWithMovie:movieName level:levelName];
ScenePage* hudLayer = (ScenePage*)scene.layer;
UTLOG(@"---> %p RETAIN COUNT: %d",hudLayer.hudLoader,[hudLayer.hudLoader retainCount]);
TouchLevelHelperLoader* loader = [[TouchLevelHelperLoader alloc]initWithContentOfFile:hudName];
hudLayer.hudLoader = loader;
UTLOG(@"---> %p RETAIN COUNT: %d",hudLayer.hudLoader,[hudLayer.hudLoader retainCount]);
[loader release];
UTLOG(@"---> %p RETAIN COUNT: %d",hudLayer.hudLoader,[hudLayer.hudLoader retainCount]);
[hudLayer.hudLoader addSpritesToLayer:hudLayer];
NSInteger sceneNumber = [[[[self class]description] stringByReplacingOccurrencesOfString:@"Scene" withString:@""]intValue];
[hudLayer loadTextPage:sceneNumber fromFile:SCENE_TEXT_FILE];
// return the scene
return scene;
}
輸出是:
2011-09-22 10:53:28.477 MP NO VID[598:207] ---> 0x0 RETAIN COUNT: 0
2011-09-22 10:53:28.490 MP NO VID[598:207] ---> 0x64af820 RETAIN COUNT: 2
2011-09-22 10:53:28.491 MP NO VID[598:207] ---> 0x64af820 RETAIN COUNT: 2
當我釋放加載程序的數據丟失,如果我不調用hudLayer.hudLoader = loader; 顯然我設置了:
@property(nonatomic,retain)TouchLevelHelperLoader* hudLoader;
任何想法?也許類方法(+)是問題嗎?
這是什麼意思的數據? hudLoader本身是失去了還是它的一個屬性?如果它是一個財產,它保留了嗎? – Alin
[loader loader] hudLoader指向死對象後。您可以通過代碼看到hudLoader是一個保留的屬性。 – Chiodo