我创建了一个协议和一个类来使用该协议。
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的子类。但是,我遇到了一些错误的警告,我忽略了警告而没有理解出现警告的原因。
答案 0 :(得分:10)
您可以继承NSObject
协议(参考here)。该协议包含任何NSObject
的基本方法。
通过使自己的协议符合它,您将能够在不收到任何编译器警告的情况下调用-release
。
示例代码:
@protocol JSTestDelegate<NSObject>
@end