网点应该有吸气剂/固定剂吗?

时间:2013-03-19 16:57:20

标签: objective-c macos cocoa-touch cocoa interface-builder

我应该更好始终

    @interface MyClass
    {
        NSTextField * myTextField ;
    }
    @property (assign)  NSTextField * myTextField ;

或只是

    @interface MyClass
    {
        NSTextField * myTextField ;
    }

为什么我有理由认为我们应该添加@property行:

  • 我最近有一个程序,如果插座没有吸气剂/装置器,它将无法工作。

  • 另外:我们在创建项目时找到以下行

    @property (assign) IBOutlet NSWindow *window;
    

3 个答案:

答案 0 :(得分:3)

只要为插座对象或任何其他对象创建property,就会为其创建ivar(在新的编译器中)。

现在创建ivars和属性已经过时了。 即使property也与自动合成匹配。

如果您真的想要ivars,那么您可以将其放在.m文件中,或者如果您希望它们是私有的,那么可以使用它们为该类添加扩展名。

  

插座是否应该有setter / getter

是的确你需要多次访问它们。就像检查单选按钮的状态一样,复选框,设置stringValue是NSTextField,通过[tableView reloadData]等重新加载表。

@interface MyClass
    {
        NSTextField * myTextField ; //this is ivar
    }
    @property (assign)  NSTextField * myTextField ; //this is property
@end

您放入.h的内容只有public并且可以访问,如果您想将其隐藏,请在.m内进行,即使在扩展程序中也是如此。

答案 1 :(得分:1)

您需要的只是使用IBOutlet的Interface Builder的属性。如果您不使用Interface Builder,则不需要IBOutlet。如果你没有使用Interface Builder,你可能根本不需要属性(属性通常是公共的,而实例变量总是私有的。)

@interface MyClass : UIViewController

@property (assign) IBOutlet NSTextField *myTextField ;

您不需要创建实例变量或将其合成为您完成的。

您可以在代码中使用self.myTextField访问它。

答案 2 :(得分:1)

我个人更喜欢,如果你需要你的对象参考范围,那么在课堂之外再去做属性声明。否则将其声明为类括号内的实例变量和实现文件中的实例变量。 (如果你没有进一步继承这个变量特征)

所以,

  • 如果您需要访问类外的变量实例,则声明属性。在MyClassViewController.h头文件

@property (strong, nonatomic) IBOutlet NSTextField *myTextField;

所以现在在其他课程中,可以通过以下方式访问:

MyClassViewController *myClassViewController = [[MyClassViewController alloc] init];
[myClassViewController.myTextField setText:@"MyValue"];

也可以获得像

这样的价值
NSLog(@"%@", [myClassViewController.myTextField text]);
  • 如果您不想要这样的公共访问,但您希望它继承。然后在类声明块本身声明。在ViewController.h头文件

    @interface ViewController { @public: // or @protected
      NSString *myString;
    }
    

现在,如果有另一个继承ViewController类的类,那么这个属性将根据其访问说明符在ChildViewController中继承。

  • 如果您想要完全隐藏属性或变量。就像它甚至没有在该类本身之外使用一样,那么你可以在私有类本身的实现文件(.m)中声明它。在ViewController.m文件中:

@interface ViewController () {

  NSString *myString;
}

所以这只会在.m文件中具有可见性,而不是其他地方。

现在声明@property - 只有在需要setter-getter默认方法(如setMyString等)时才需要声明。这也可以根据你对该实例的可见性要求在.m和.m中声明。

希望你现在得到这个概念。这完全取决于能见度。