gpt4 book ai didi

iphone - ARC 释放子类 NSObject,但不释放自定义 NSObject

转载 作者:行者123 更新时间:2023-11-29 04:13:07 25 4
gpt4 key购买 nike

在一个小型 RTS 项目中,我有一个按钮列表,每个按钮都分配有一个构建对象。有些建筑物非常通用,但其他建筑物则非常特殊,因此我将某些建筑物作为子类。

当我创建一个按钮列表时,每个按钮都有一个 PEHouse 对象,一切正常。

但是一旦其中一个 PEHouse 成为 PEHouse 的子类,它就会立即发布,我不明白为什么。

按钮具有以下属性:

@property (nonatomic, strong) PEHouse *linkedHouse;

房子有这些值(value):

@interface PEHouse : NSObject {
NSString *title;
}
@property (nonatomic) BOOL is_locked;

我的塔有这样的设置:

#import "PEHouse.h"

@interface PETower : PEHouse <NSObject>

-(void)secondAction;
+ (PETower*)createTower;

@end

当我生成这样的常规对象列表时:

DLog(@"Building menu");
if ([key isEqualToString:@"button_income"]) {
[GMBuildMenu buttonFromBuilding:[PEHouse newSawmill] withIndex:1 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newQuarry] withIndex:2 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newIronMine] withIndex:3 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newMiscShop] withIndex:4 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newWeaponsShop] withIndex:5 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newArmorShop] withIndex:6 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newBazaar] withIndex:7 inDict:dict];
[GMBuildMenu buttonFromBuilding:[PEHouse newTreasury] withIndex:8 inDict:dict];
return YES;
}

一切正常。当我只生成一个子集构建按钮时,如下所示:

 if ([key isEqualToString:@"button_military"]) {
[GMBuildMenu buttonFromBuilding:[PEHouse newTower] withIndex:1 inDict:dict];
}

对象在...之后立即释放

有人知道为什么会发生这种差异吗?

更新

代码如下所示:

+(OpenGLButton*)buttonFromBuilding:(PEHouse*)house withIndex:(int)index inDict:(NSMutableDictionary*)dict {
OpenGLButton *new = [GMButtonMenu addButtonToMenu:dict withLabel:house.button_art andShowname:house.title];
new.linkedHouse = house;
CGRect buttonFrame = CGRectMake(20, ((30)*index), (28*[GMButtonMenu globalGUIScale]), (28*[GMButtonMenu globalGUIScale]));
new.location = buttonFrame;
new.index = index;
new.details = house.desc;
return new;
}

在 PEHouse 中我们发现:

+ (PETower *)newTower {
PETower *new = [PETower createTower];
return new;
}


+ (PEHouse *)newSawmill {
PEHouse *new = [PEHouse createDefault];
new.title = @"Sawmill";

new.is_large = YES;
return new;
}

最佳答案

首先,[GMBuildMenu buttonFromBuilding:...] 类方法的签名是什么?根据您的代码,它看起来是:

+(void)buttonFromBuilding:(PEHouse *)house withIndex:(int)index inDict:(NSDictionary *)dict 

但是,按照惯例,这样命名的方法应该返回一个按钮:

+(UIButton *)buttonFromBuilding:(PEHouse *)house withIndex:(int)index inDict:(NSDictionary *)dict

了解您的方法对 PEHouse 对象执行的操作会很有趣。它是否强烈拥有它?

关于iphone - ARC 释放子类 NSObject,但不释放自定义 NSObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14092080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com