假设我有一个实例变量 MyObject * test;
@property(nonatomic, retain) MyObject* test;
的.m
@synthesize test;
我可能会初始化它,或者现在可能依赖于我是否需要。如果我不需要它,那么在初始化时就没有浪费了。
问题在于dealloc,进行以下检查和发布是否安全?
-(void) dealloc
{
if ( test != nil )
{
[test release];
}
{
谢谢!
答案 0 :(得分:2)
是的,这是安全的。但是,将release
发送到零不会造成任何麻烦,因此您无需检查。
答案 1 :(得分:0)
你不需要这样做。如果您将自动释放的对象分配给 ivar ,则可以执行此操作:
self.test = nil;
编辑:
不要忘记在 dealloc 函数结束时调用[super dealloc]
答案 2 :(得分:0)
这是安全的,但不是标准做法。您可以安全地向nil引用发送消息,这是编写惯用的Objective-C的重要部分。只需释放ivar:
- (void)dealloc
{
[test release];
// ...
答案 3 :(得分:0)
这完全没问题。简单地省略nil
的测试也是比较惯用的。
objc_msgSend
或其变体之一的调用。 objc_msgSend
(和变体)的实现允许您发送消息的对象nil
,因为它已被很好地定义,并且不被视为消息nil
的程序员错误。 objc_msgSend
+变体的返回值为零:
示例:
NSString * string = nil;
NSString * copy = [string copy]; << copy will be 0/nil
NSUInteger length = [copy length]; << length will be 0
这意味着如果返回一个c ++对象,你必须测试nil - 如果接收者是nil,则不会调用构造函数。
*通常,在某种意义上,编译器调用它来执行消息传递以及其他一些常见例程。