-2
@interface QuickViewControllViewController : UIViewController<UIScrollViewDelegate>{
IBOutlet UIWebView *myWebView;
UIScrollView *scrollView;

IBOutlet UIImageView *imagePreview;
UIImage *source;

}

@end

如果我不希望它们暴露在类之外,这些声明与以 @property 开头的声明有什么区别?当您命令从情节提要中拖动它们时,Xcode 会自动将它们设为 @properties。我宁愿不使用@property,所​​以我不必使用self.property。我最好让它们成为属性吗?

谢谢

4

3 回答 3

1

当您命令从情节提要中拖动它们时,Xcode 会自动将它们设为 @properties

这不是真的,如果你想创建不是 xib/storyboard 属性的类成员,然后将命令拖动到{}.h 文件的部分,这样它们就不会被声明为属性。

@interface QuickViewControllViewController : UIViewController<UIScrollViewDelegate>{
// drag here the line from xib/storyboard for instance members and not properties
}

现在,当您想要访问类之外的成员时使用属性instance.property,并且对于声明的每个属性,系统将自动生成不会发生在其他类型的类成员中的 setter 和 getter。

因此,在您的情况下,如果您只想让班级成员在班级中可见,则可以使用发布的代码,并且我认为,如果班级成员仅在一个班级中可见,则最好不要使用属性。

请注意,您也可以为这种情况声明私有属性,但有点没用。

于 2013-06-01T20:30:35.953 回答
0

@property使其成为属性,而另一个使其成为仅可在类内部访问的实例变量。是的,如果您不需要在类外部对其进行任何访问,则最好声明实例变量

当您通过 xcode 创建插座时,xcode 将其设置为属性,换句话说,属性应该以这种方式创建。您可以编写代码,然后通过右键单击 IB 中的对象并拖动以旧方式设置它文件所有者的出口

于 2013-06-01T20:29:58.037 回答
0

使它们成为@property绝对是使用self和 getter 和 setter 的最佳实践。如果您想减少曝光,请在您的.m文件中尝试此操作。

@interface QuickViewControllViewController()

@property (nonatomic, weak) IBOutlet UIWebView *myWebView;
@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, weak) IBOutlet UIImageView *imagePreview;
@property (nonatomic, strong) UIImage *source;

@end

如果你真的想直接使用 ivars,你仍然可以这样_source_myWebView

于 2013-06-01T23:19:44.203 回答