1

我读过你应该在dealloc. 我注意到它正在这样做init,这可以吗?还是你应该在其中做同样的事情dealloc

“这是一种微妙但方便的方法。如果您将自己作为委托传递给另一个对象,请在解除分配之前重置该对象的委托。”

文件.h

@interface TestService : NSObject
{
    NSObject <TestServiceDelegate> *m_delegate;
}

@property (nonatomic, assign) NSObject <TestServiceDelegate> *delegate;

文件.m

 @synthesize delegate=m_delegate;

    - (id)init
    {
        if (self = [super init])
        {        
            m_delegate = nil;
        }

        return self;
    }

    - (void)dealloc

    {
         [super dealloc];
    }
4

2 回答 2

8

两者都不需要。

init方法的情况下,实例变量将以 开头nil,所以没关系。

在 的情况下dealloc,因为您的委托实例变量是(我在这里猜测,但如果不是它应该!)设置为weak(ARC)或assign(非ARC)属性,一旦您释放对象,将不会发送任何内容给代表。

于 2013-02-18T17:01:27.153 回答
5

您添加了此报价:

“这是一种微妙但方便的方法。如果您将自己作为委托传递给另一个对象,请在解除分配之前重置该对象的委托。”

这是指与您发布的代码完全不同的东西。引用适用于以下示例:

Foo.m:

- (void)someFooMethod {
    _someBariVar = [[Bar alloc] init];
    _someBariVar.delegate = self;
}

- (void)dealloc { // Foo's dealloc
    _someBariVar.delegate =  nil;
    [_someBariVar release];

    [super dealloc];
}

这样做的目的是为了防止在调用该方法Bar时该对象被其他人保留。Foo dealloc由于Foo实例消失了,但Bar实例没有,您不希望Bar实例仍然认为它具有有效的委托。

于 2013-02-18T17:11:14.977 回答