Objective c cocoa为什么IBOutlet和属性具有相同的名称?
我不熟悉objective-c。当我阅读别人写的源代码时,我遇到了一个问题 我发现有Objective c cocoa为什么IBOutlet和属性具有相同的名称?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我不熟悉objective-c。当我阅读别人写的源代码时,我遇到了一个问题 我发现有 IBOutlet NSPopover *popover; 以及 @property NSPopover *popover; PopoverViewController.h #import <Foundation/Foundation.h> #import <Cocoa/Cocoa.h> #import "TimerPopoverViewController.h" @clas
IBOutlet NSPopover *popover;
以及
@property NSPopover *popover;
PopoverViewController.h
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
#import "TimerPopoverViewController.h"
@class TimerLogic;
@class TimerInfo;
@interface TimerPopoverDelegate : NSObject <NSPopoverDelegate> {
@private
IBOutlet NSPopover *popover;
IBOutlet NSWindow *detachWindow;
IBOutlet TimerPopoverViewController *viewController;
}
@property NSPopover *popover;
- (void)showPopover:(id)sender timerInfo:(TimerInfo *)timerInfo;
@end
#import <Cocoa/Cocoa.h>
@class TimerInfo;
// Things declared here are public
@interface TimerPopoverDelegate : NSObject <NSPopoverDelegate>
// You could leave this here if it is required by other parts of the program,
// but other parts of the program really shouldn't require it. See below.
// @property (nonatomic, readonly, weak) NSPopover *popover;
- (void)showPopover:(id)sender timerInfo:(TimerInfo *)timerInfo;
@end
#导入
#进口
#导入“TimerPoOverViewController.h”
@类时间逻辑;
@类TimerInfo;
@接口TimerPopVerdelegate:NSObject{
@私人的
IB插座NSPopover*popover;
IBN出口窗口*可拆卸窗口;
IBOutlet TimerPopoverViewController*viewController;
}
@财产NSPopover*popover;
-(void)showPopover:(id)发送方timerInfo:(timerInfo*)timerInfo;
@结束
我认为它们是不同的变量。然而,我不知道他们做什么
就我而言,IBOutlet
将显示一个popover。
但是
@property
做什么呢?这要么是非常旧的代码,要么是以非常旧(现在不鼓励)的风格编写的。这里的IBOutlet
声明了一个实例变量(ivar)。@property
正在声明实例变量支持的属性。在现代ObjC中,您应该以以下方式实现它:
PopoverViewController.h
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
#import "TimerPopoverViewController.h"
@class TimerLogic;
@class TimerInfo;
@interface TimerPopoverDelegate : NSObject <NSPopoverDelegate> {
@private
IBOutlet NSPopover *popover;
IBOutlet NSWindow *detachWindow;
IBOutlet TimerPopoverViewController *viewController;
}
@property NSPopover *popover;
- (void)showPopover:(id)sender timerInfo:(TimerInfo *)timerInfo;
@end
#import <Cocoa/Cocoa.h>
@class TimerInfo;
// Things declared here are public
@interface TimerPopoverDelegate : NSObject <NSPopoverDelegate>
// You could leave this here if it is required by other parts of the program,
// but other parts of the program really shouldn't require it. See below.
// @property (nonatomic, readonly, weak) NSPopover *popover;
- (void)showPopover:(id)sender timerInfo:(TimerInfo *)timerInfo;
@end
(目前,
popover
是公共的,但是你应该避免以这种方式暴露IBOutlet
。外部对象不应该直接接触视图控制器的插座。)我注意到IBOutlet
被放在@private
中。那有关系吗?由于我对ObjC非常陌生,我很难理解在您的回答中声明一个由实例变量支持的属性意味着什么。你能给我一些提示吗?谢谢!:)作为一名新的ObjC开发人员,我不会为此担心。以这种方式声明实例变量不再必要或合适。有关当前做法以及属性和IVAR如何协同工作的信息,请参见。