我们在xcode 4.4.1中合成了哪些属性

时间:2012-09-16 17:21:36

标签: ios xcode4.4

我正在使用Xcode 4.4.1。当我在.h文件中定义@property UINavigationControllerNSArray时,我必须在.m文件中@synthesize。但有一些@property,例如UITabBarControllerNSString,我没有@synthesize来使其发挥作用。

我的问题是@property需要@synthesize以及不需要的内容。

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
UITabBarController *_tabBar;
UINavigationController *_navBar;
}

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) Employee *empView;
@property (nonatomic, retain) UITabBarController *_tabBar;
@property (nonatomic, retain) UINavigationController *_navBar;

AppDelegate.m

@implementation AppDelegate
@synthesize _navBar;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
Employee *emp = [[Employee alloc]initWithNibName:@"Employee" bundle:nil];
self._tabBar = [[UITabBarController alloc]init];
self._navBar = [[UINavigationController alloc]initWithRootViewController:emp];
self._tabBar.viewControllers = [NSArray arrayWithObjects:_navBar, nil];
self.window.rootViewController = self._tabBar;
self._navBar.navigationBar.tintColor = [UIColor brownColor];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}

当我@synthesize UINavigationController时,我得到UINavigationControllerUITabBarController。但是当我没有@synthesize UINavigationController时,我没有得到UINavigationController,但会显示UITabBarController

在这两种情况下,我都没有@synthesize UITabBarController

由于

1 个答案:

答案 0 :(得分:13)

自Xcode 4.4附带的最新版本的编译器(LLVM)以来,不再需要@synthesize指令。

您声明未明确使用@property的每个@synthesize将自动合成其访问者,就像您编写@synthesize yourprop = _yourprop;一样。这是最新编译器的一个新功能(就像之前必须为所有@synthesize明确地编写@properties(或实现访问器)一样。

请注意,如果您愿意,您当然可以明确地使用@synthesize属性(就像过去一样)。这可以是显式设计用于属性的支持实例变量的方法。但实际上我强烈建议忘记实例变量(事实上,我的@interface声明的大括号之间不再使用显式实例变量了),仅适用于@property声明。有了这个以及让编译器为您生成@synthesize指令的新功能,您将避免使用大量的粘合代码并使您的类更紧凑。


仅当您有@property隐式合成时,您可以切换警告(意味着您没有明确写出@synthesize指令,因此编译器现在为你合成它)。只需转到项目的Build Settings并打开“Implicit Synthesized Properties”警告(在“Apple LLVM编译器4.0 - 警告 - Objective-C”部分下),编译器将告诉您隐藏的所有属性合成访问器,因为你自己没有提到@synthesize指令。