我将 UIToolbar 子类化,因为我将在我的应用程序中重用它。UIToolbar 使用委托协议:
//
// UIToolbarCustom.h
//
#import <UIKit/UIKit.h>
@protocol UIToolbarCustomDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface UIToolbarCustom : UIToolbar {
id <UIToolbarCustomDelegate> delegate;
}
@property (strong, nonatomic) id delegate;
@end
斯坦福 iOS 开发课程老师建议显式声明所有 ivars 前缀,如下划线,例如:
@implementation UIToolbarCustom
@synthesize delegate = _delegate;
@end
但是,在这个指定的场景中,它给了我一个错误:
error: property 'delegate' attempting to use ivar '_delegate'...
如果我使用,代码工作得很好:
@synthesize delegate = __delegate; or
@synthesize delegate;
这里发生了什么?UIToolbar 类中是否有一个名为 _delegate 的私有实例变量?
更新
感谢大家的所有澄清和建议,我学到了很多东西。原来我是 iOS 开发的新手(这是我的第一个应用程序的第二个版本,所以我正在努力做正确的事=p)。按照提示,我提出了这个新的头文件:
//
// Toolbar.h
//
#import <UIKit/UIKit.h>
@protocol ToolbarDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface Toolbar : UIToolbar
@property (strong, nonatomic) id delegate;
@end
笔记:
类前缀已删除。
委托声明已被删除(我使用的是 ios 委托教程代码,但代码示例使用的是较旧的 xcode 版本,需要声明)。
合成被移除了,我也不知道我们不再需要合成我们的属性了。
PS:显然代码不起作用,因为ivar问题。我要改名字,所以不用合成,反正也不知道用什么名字……