【问题标题】:iPhone - Apple default sample code missing some vars?iPhone - Apple 默认示例代码缺少一些变量?
【发布时间】:2011-07-20 09:39:04
【问题描述】:

在 XCode 4 中,当您创建一个新的 View-base-application 项目时,这里是 AppDelegate 的 .h :

#import <UIKit/UIKit.h>

@class TestAppleProjectViewController;

@interface TestAppleProjectAppDelegate : NSObject <UIApplicationDelegate> {

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestAppleProjectViewController *viewController;

@end

还有 .m 上的一些项目:

@implementation TestAppleProjectAppDelegate

@synthesize window=_window;
@synthesize viewController=_viewController;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    { 
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }

我可以看到没有 vars 的属性...
我可以看到使用类中不存在的 var 名称进行合成...
我可以看到对这些属性的调用......

但是...变量在哪里?
为什么这样的代码有效?
是否不再需要在类中定义变量?属性够吗?

【问题讨论】:

    标签: iphone properties class-design instance-variables


    【解决方案1】:

    实际上,当您将 var 声明为属性时,您不必再次将其声明为 var。之前我们必须再次声明它的注释是以前版本的 Xcode 中的一个错误。现在已经更正了。

    这只是一种习惯,更少的代码重复,这很好。 (默认情况下,它会创建一个以“_”开头的同名隐藏变量)。

    【讨论】:

    • Uhhh...如果他们也可以消除编写默认合成线的需要...
    • 旧行为不是“错误”,也与 Xcode 没有任何关系——它是 legacy Objective-C runtime 的一个特性。自动 ivar 生成是现代运行时的一项功能,仅在支持它的平台上可用(iPhone 和 64 位 10.5+)。
    • 合成不一样!属性是让编译器知道有一个带有访问器的 var。合成就是生成这些访问器。您可以在不使用 @synthesize 的情况下使用 @property 并将自己写成评估员。或者简单地像这样声明合成:@synthesize window;
    • 重要提示。如果不添加 var,gdb 调试器将无法在断点处告诉您 var 的值。
    【解决方案2】:

    我不确定...我认为当您编写 @synthesize prop=_var 时,它会自动为属性 prop 创建一个名为 _var 的私有实例变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多