【发布时间】:2014-02-25 23:52:18
【问题描述】:
我学习 Obj-C 已经有一段时间了,我有一个基本问题。在我的代码中似乎到处都有大量的“自我”。我认为这归结为一个关于声明和使用变量的两种方式之间差异的基本问题。
附件是一些支持我的问题的代码。在其中,声明了两个变量(在不同的地方)并用于在方法中执行相同的操作:optionA 和 optionB。我不确定使用哪一个。我认为这可能是因为使用“属性”,如 optionB 所示,可以确保我获得访问器(setter 和 getter),但我看到 optionA 显然有一个 setter。
我更喜欢选项 A,因为这意味着我不需要到处都是“自我”,但我想了解使用其中一个而不是另一个的含义。
在我正在处理的程序中,所有变量都被声明为属性(下面的选项 B),但在访问它们时我必须使用“自我”。我想知道这是否正确,只是正确做事方式的产物,或者我是否完全不合时宜,应该使用另一种形式,比如 optionA。
何时/为什么有人会在接口的大括号之间声明一个变量(如 optionA)?
我搜索了已回答的问题,但没有找到任何能完全告诉我我想在这里学习什么的问题。但我在其他问题或他们的答案中找不到我正在寻找的信息。
我在这里有一张代码的图片(但显然我没有被允许将其直接链接到此消息中的声望点):http://i1127.photobucket.com/albums/l631/GenericImage/headerQueryOBJC.jpg
这里是列表:
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSTextField *optionA;
}
- (IBAction)happy:(id)sender;
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *optionB;
@end
实现
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
-(IBAction)happy:(id)sender
{
[optionA setStringValue:@":-)"];
[[self optionB] setStringValue:@":)"];
}
@end
【问题讨论】:
-
感谢维京人!你是如何修复格式的?我不太明白我应该做什么......
-
如果您只是选择所有代码行并点击编辑器中的代码按钮,它将为您格式化代码。 (您格式化代码的实际方法是在每行之前放置四个空格。但编辑器可以为您完成,所以这样的工作更少。)
-
谢谢你,查克!下次我会尝试这种技术。我很困惑,尝试使用反引号和八个空格……但无济于事。
标签: objective-c cocoa properties ivar