我有一个uitextfield
子类,在init
方法和setDelegate
我有这个:
- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
[super setDelegate:paramDelegate];
MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
self.delegate = limitedDelegate;
}
我正在使用ARC,但这会导致BAD_ACCESS。有任何想法吗?
答案 0 :(得分:0)
您在self.delegate = limitedDelgate
方法中撰写setDelegate:
。这与调用[self setDelegate:limiatedDelegate]
完全相同。由于您在-setDelegate:
方法本身内,因此导致了英特尔递归。希望这有帮助!
编辑:根据您对意图的评论,将其覆盖如下:
- (void) setDelegate:(id<UITextFieldDelegate>)paramDelegate{
MRAAdvancedTextFieldDelegate *limitedDelegate = [[MRAAdvancedTextFieldDelegate alloc] init];
[super setDelegate:limitedDelegate];
}
但是我不相信这样做是个好主意 - 你应该让你的客户代码在代理的实例中传递。
答案 1 :(得分:0)
self.delegate = limitedDelegate;
变成了
[self setDelegate:limitedDelegate];
编译器导致无限循环。解决方案:而不是使用属性,而是在自定义setter方法中使用实例变量:
delegate = limitedDelegate;