警告 - 在协议中找不到释放

时间:2010-11-09 15:22:34

标签: iphone objective-c ios

我创建了一个协议和一个类来使用该协议。

JSTest.h file =

@protocol JSTestDelegate

@end

@interface JSTest : NSObject {

    id<JSTestDelegate> delegate;
}

@property (nonatomic, retain) id<JSTestDelegate> delegate;

- (id)initWithDelegate:(id<JSTestDelegate>)del;

@end

JSTest.m file =

#import "JSTest.h"


@implementation JSTest

@synthesize delegate;

- (id)initWithDelegate:(id<JSTestDelegate>)del {

    self = [super init];

    if(self) {

        self.delegate = del;
    }

    return self;
}

- (void)dealloc {

    [delegate release];
    [super dealloc];
}

我的问题是 - 在dealloc方法中,

[delegate release]

给我一​​个警告

-release not found in protocol(s)

我无法确定原因。我的代码不应该失败,因为委托将永远是NSObject的子类。但是,我遇到了一些错误的警告,我忽略了警告而没有理解出现警告的原因。

1 个答案:

答案 0 :(得分:10)

您可以继承NSObject协议(参考here)。该协议包含任何NSObject的基本方法。

通过使自己的协议符合它,您将能够在不收到任何编译器警告的情况下调用-release

示例代码:

@protocol JSTestDelegate<NSObject>

@end