2015-08-25 22 views
-2

我知道我的问题很愚蠢,但我需要知道这是为了我的进一步发展。我编程开发我iPhone application不使用任何xib and storyboard,对于我已宣布多个object variables像下面如何为良好的代码结构目标声明对象变量C

UINavigationController *navigationController; 
    UIActivityIndicatorView *activityIndicator; 
    UIImageView *splashImage; 
    NSTimer *checkJSONtimer; 
    UILocalNotification *localNotification; 
    NSUserDefaults * defaults; 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) Login *loginView; 
@end 

以上代码到.h file我宣布,现在的问题是一些UIObjects declared@property和一些variable我们的也用propertiesattributes声明。其中Objects UI and NS,以上两种方法如何声明。

哪一个是programming和良好的太有道?

+1

哦,不。那真的很糟糕。它实际上是否构建时没有重复的符号链接器错误? – trojanfoe

+0

您意识到每次包含头文件时都会创建全局变量? – Macmade

+0

对不起,我不能帮你。给我一个很好的解释代码,它更好地了解新的开发人员@ trojanfoe – AnswerMe

回答

0

你绝对应该阅读文档..但很简单的答案是,属性给你免费的getter和setter。 (但是请阅读文档,除此之外还有更多其他内容)当您定义@property时,您不必再定义变量(过去实际上必须)。通常你只想使用属性。

0

要评论:

有什么理由宣布高德(实例变量,你叫什么对象变量)的头。它在过去(几​​年前)是必需的,但不是。另一方面,声明的属性(@property)将语义信息添加到类API的用户。

所以在你的界面中应该没有ivars。

但是,声明一个声明的属性后,有一些原因需要显式声明ivars。你应该这样做类继续(扩展),如下所示:

@interface MyClass() 
{ 
    id _ivar; 
} 

我更喜欢在实现中声明ivars,只要有可能。 (大多数开发人员不知道这个能力。)

@implementation MyClass 
{ 
    id _ivar; 
} 

如果伊娃的标识符声明的属性加_的标识符匹配,生成的代码将使用伊娃在这两个变种。

+0

UIObjects呢? – AnswerMe

+0

由于缺乏大括号,他没有声明iVars,而是全局变量! – Macmade

+0

是的......我知道一个..但是我的问题很简单,如何声明UIObjects?有财产或没有财产 – AnswerMe

0

在头文件中的* .h,你应该把全局属性,一个你想要当你实例化对象类从其他类访问的。你应该使用@属性。

如果你想本地对象属性只需将您的@property内@interface在* .m文件:

@interface Class() 
@property NSTimer *yourTimer; 
@end 

对于对象的局部变量,你可以将它们放置在里面的* .m文件@implementation:

@implementation Class { 
    int timeToWaitInMillisseconds; 
} 

延伸阅读:http://rypress.com/tutorials/objective-c/properties

+0

对于UIImageView * splashImage;这个? – AnswerMe

+0

在标题中应该只有一个'extern'声明。但是,您不应将它们称为“全局属性”,因为属性属于某些内容。 –