在cocoa2.0中,@ property关闭接口中的变量声明

时间:2010-07-30 07:17:58

标签: cocoa

只是试验@property和@synthesize:

@interface Greeter : NSObject 
//{
//  NSString * name;
//}
@property (assign) NSString * name;
- (NSString *) greeting;
@end

似乎是这样的情况,如果你使用@property声明一个变量,你不必在大括号之间声明它(如果所有的接口变量都是使用声明的话,你甚至不需要大括号@属性)。这总是正确的吗?忽略界面的顶部(包括括号)是不错的风格?我一直在使用它们,并对冗余感到恼火。

2 个答案:

答案 0 :(得分:2)

没有“Cocoa 2.0”。

在Objective-C 2.0中,在the modern runtime上,是的,您可以省略实例变量,属性将为您生成它们。 Mac OS X上的The legacy runtime仍然需要显式的实例变量。

你不能完全忽略ivar部分但是,但你可以把它留空。

答案 1 :(得分:0)

这是我第一次发现你可以自动合成属性并在类扩展中声明新属性的网页。它也提供了一些有趣的背景故事。

http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/

至于风格和正确性,过去几周我一直在使用主要属性,它使我的代码看起来很干净!我现在可以在我的实现中声明私有属性,而不是在标题中公开它们,使得任何接口都可以使用我的类非常简单且不会混淆使用。

我在使用界面构建器时遇到了一个问题,其中iVar到视图控制器的任何子视图仍然必须在接口构建器的标题中声明,以将其视为IBOutlet并分配给它。你仍然可以声明那些@private然后在你的实现中的类扩展中声明私有属性,如果你真的想要它作为你可以使用的属性。

// In your header
@interface MenuViewController : UIViewController {
    @private
    IBOutlet UIButton *buttonPeopleShouldNotKnowAbout;  
}
@end

// And in your implementation
@implementation MenuViewController ()
@property (nonatomic, readwrite, assign) IBOutlet UIButton *buttonPeopleShouldNotKnowAbout;
@end