什么样的属性做,我们在Xcode 4.4.1合成(What properties do we syn

2019-07-31 15:21发布

我使用的Xcode 4.4.1。 当我定义@property喜欢UINavigationControllerNSArray在.h文件中我有@synthesize它在.m文件。 但是,一些@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我不明白UINavigationControllerUITabBarController显示。

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

谢谢

Answer 1:

由于编译器(LLVM)的最后一个版本附带的Xcode 4.4,该@synthesize已经不再需要指令。

@property声明对您不使用@synthesize明确地将有,如果你写它的访问自动合成@synthesize yourprop = _yourprop; 。 这是最新的编译器的新功能(如你必须写之前@synthesize (或实现存取)为您的所有@properties明确)。

请注意,当然,你仍然可以使用@synthesize如果你喜欢(就像旧时代)财产作了明确规定。 这可以是明确设计支持实例变量使用该属性的方式。 但作为事实上我强烈建议有关实例变量忘了 (实际上是的年龄我不使用我的花括号之间的显式实例变量@interface声明了),只有用工作@property声明。 与和新的功能,让编译器生成@synthesize你的指令,你会避免很多的胶水代码,让你的类更紧凑写。


仅供参考,当你有一个你可以切换警告 @property针对其隐含合成(意为你没有写@synthesize指令明确因此,对于该编译器现在合成为你)。 只需转到项目的生成设置并打开“隐合成属性”警告(在“苹果LLVM编译器4.0 - 警告 - Objective-C的”一节),编译器会告诉你所有的属性,它隐含合成的访问器,你没有提到的@synthesize自己的指令。



文章来源: What properties do we synthesize in xcode 4.4.1
标签: ios xcode4.4