我已經創建實現在一個名爲NumericTextFieldDelegate
然後它自己的類UITextFieldDelegate委託對象我已經初始化委託我這樣的控制器:直接初始化代表產生ARC警告和EXC_BAD_ACCESS崩潰
textFieldName.delegate = [NumericTextFieldDelegate new];
和我這一警告來自編譯器:
Assigning retained object to unsafe property; object will be released after assignment
這意味着,對象將在轉讓之後,實際上當我運行的應用程序,我關注的UITextField釋放我得到一個EXC_BAD_ACCESS
一個第二應用程序崩潰...
只有這樣,才能使其工作,我發現是創建與派遣NumericTextFieldDelegate
的實例的工廠方法的靜態變量:
@interface NumericTextFieldDelegate : NSObject <UITextFieldDelegate>
+(NumericTextFieldDelegate *) getDelegate;
@end
@implementation NumericTextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
// This allows backspace
if ([resultingString length] == 0) {
return true;
}
NSInteger holder;
NSScanner *scan = [NSScanner scannerWithString: resultingString];
return [scan scanInteger: &holder] && [scan isAtEnd];
}
+(NumericTextFieldDelegate *) getDelegate {
static NumericTextFieldDelegate *del;
@synchronized(del) {
if(del == nil)
del = [NumericTextFieldDelegate new];
}
return del;
}
@end
,然後當我分配在這樣的委託:
textFieldName.delegate = [NumericTextFieldDelegate getDelegate];
一切正常,但我的問題是:
爲什麼我不能簡單地分配一個匿名的類的新實例? 爲什麼對象在分配後自動釋放?
爲什麼我需要此解決方法?
謝謝。
這是一個UITextField,而不是自定義。 – aleroot
方法不應該以'get'作爲前綴,除非它們是非常具體的類型(這不是這個類型)。 – bbum
@bbum我從Java繼承了get前綴:-)感謝您的提示 – aleroot