【问题标题】:.h instance variable declaration.h 实例变量声明
【发布时间】:2012-11-28 18:30:46
【问题描述】:

我很难理解为什么以下文本字段在某些教程中被声明了两次。

在.h文件中:

# include <UIKit/UIKit.h>

@interface MyViewController : UIViewController {

    UITextField *name;  // <----- What do I need this for? Is it the same as below?
}

@property (nonatomic, strong) IBOutlet UITextField *name;  // <----- Same as this?

@end

一开始我以为这就像一个实例变量,但它们只是在 .m 文件中声明的,对吧?

.m 文件

#import "MyViewController.h"

@implementation UIViewController {

    NSString *myString; // <----- This is an instance variable, right?

}

什么是“UITextField *name;”为了?我不只需要前面有@property 的第二个吗?谢谢。

【问题讨论】:

  • 来自 Apple Doc(封装数据):您可以在没有属性的情况下定义实例变量 最佳做法是在需要跟踪值的任何时候对对象使用属性或其他物体。如果您确实需要在不声明属性的情况下定义自己的实例变量,可以将它们添加到类接口或实现顶部的大括号内。

标签: objective-c xcode controller declaration


【解决方案1】:

这是一种老办法,只要使用属性就可以了。 如果两者都声明,则必须使用@synthesize 名称;在您的 .m 文件中使 self.name 与名称相同。 XCode4.2 自动合成名称 = _name。所以在你的 .m 文件中尽可能使用 self.name。

当您不想实现 setter 和 getter 时,{} 中的变量仅用于内部或私有。

【讨论】:

    【解决方案2】:

    如果您的目标是 iPhone OS 或 64 位 Mac OS X,那么您不需要为您的属性定义 ivars。看看Dynamic ivars: solving a fragile base class problem

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多