*初学iOS程序员,请耐心解释
假设我有2个班级 - Foo,Bar
在类Bar中的,我有一个指向Foo实例的指针,我在init期间设置了它。 (因为我不知道如何正确地互相导入Foo和Bar,我最终将类型设置为id而不是Foo)
@implementation Bar{
id pointerToInstanceOfFoo;
}
我如何为Bar编写dealloc函数?或者我甚至覆盖了dealloc函数?
现在我有
-(void)dealloc{
pointerToInstanceOfFoo = NULL;
[super dealloc];
}
当Bar死后,我仍然希望指向Foo的指针,但是我做得对吗?几个问题:
@property (nonatomic, weak) id pointerToInstanceOfFoo
代替?如果是这样,为什么我不断收到关于ARC中没有弱指针的错误?delete pointerToInstanceOfFoo;
在dealloc函数?? 对于这种困惑感到抱歉,我们将非常感谢任何解释/答案!!
P.S。我正在使用XCode 4.4并在iOS 5.0上运行cocos2d v2.1 beta ...我认为它正在使用arc
答案 0 :(得分:3)
您不能在ARC中使用[super dealloc]
。因此,如果编译,您没有使用ARC,您需要cals retain
和release
。编写一个完整的教程并不适合堆栈溢出的答案。至于你的其他问题:
1)只需在实现文件中导入它们,而不是头文件。
2)是的
3)如果它让你开心。该错误可能意味着您的目标是iOS 5.0以下(即项目设置中的部署目标设置为小于5.0),其中不支持弱指针或ARC已关闭。我认为您没有准确报告错误消息,因为它没有任何意义。
4)“删除”不是有效的目标-c或有效的c。
P.S。不,你不希望在释放Bar之后该指针出现,因为那将是内存泄漏。也许你想要一个静态变量而不是实例变量?
答案 1 :(得分:1)
正如borrden所提到的,保留/释放和目标-c内存管理是一个相当大的主题,已被广泛处理。我建议您阅读this以开始并从那里开展更多研究。
虽然您可以(应该?)使用ARC并省去一些麻烦,但了解常规保留/释放周期可以让您更好地理解ARC中的强弱参考。虽然您在使用ARC时无需了解objective-c中有关内存管理的所有内容,但您仍需要了解其中的一些内容。