我在iPhone程序中遇到了一个特殊的问题.这是我的代码 -
在我的视图控制器的viewDidLoad中,我创建了一个数组
grades = [[NSArray arrayWithObjects:@"Grade 1", @"Grade 2", @"Grade 3", nil] retain];
Run Code Online (Sandbox Code Playgroud)
现在我有一个房产
@property (nonatomic) NSInteger selectedGradeIndex;
Run Code Online (Sandbox Code Playgroud)
我写了以下setter方法
- (void) setSelectedGradeIndex:(NSInteger)newValue
{
if(newValue >= [grades count])
{
NSLog(@"newValue = %d >= [grades count] = %d",newValue, [grades count]);
newValue = 0;
}
else if(newValue < 0)
{
NSLog(@"newValue = %d < 0",newValue);
newValue = [grades count] - 1;
}
selectedGradeIndex = newValue;
lblGrade.text= [grades objectAtIndex:selectedGradeIndex];
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中的某个地方
self.selectedGradeIndex = -1;
Run Code Online (Sandbox Code Playgroud)
setter中的日志显示
newValue = -1 >= [grades count] = 6 …Run Code Online (Sandbox Code Playgroud) 我创建了一个协议和一个类来使用该协议.
JSTest.h文件=
@protocol JSTestDelegate
@end
@interface JSTest : NSObject {
id<JSTestDelegate> delegate;
}
@property (nonatomic, retain) id<JSTestDelegate> delegate;
- (id)initWithDelegate:(id<JSTestDelegate>)del;
@end
Run Code Online (Sandbox Code Playgroud)
JSTest.m文件=
#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];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 在dealloc方法中,
[delegate release]
Run Code Online (Sandbox Code Playgroud)
给我一个警告
-release not found in protocol(s)
Run Code Online (Sandbox Code Playgroud)
我无法确定原因.我的代码不应该失败,因为委托将永远是NSObject的子类.但是,我遇到了一些错误的警告,我忽略了警告而没有理解出现警告的原因.