Ios UITextField,在ViewController中定义它的位置

Ios UITextField,在ViewController中定义它的位置,ios,objective-c,uiviewcontroller,uitextfield,viewcontroller,Ios,Objective C,Uiviewcontroller,Uitextfield,Viewcontroller,我有几个代码示例。在@interface ViewController{}内部定义两个文本字段A和B与在其外部定义两个文本字段有什么区别?谢谢 内部类ViewController可以访问 @interface ViewController : UIViewController{ UITextField *a; } @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITex

我有几个代码示例。在@interface ViewController{}内部定义两个文本字段A和B与在其外部定义两个文本字段有什么区别?谢谢


内部类ViewController可以访问

@interface ViewController : UIViewController{
   UITextField *a; 
}
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *a;
@end
类外的ViewController可以访问

@interface ViewController : UIViewController{
   UITextField *a; 
}
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *a;
@end
a和b都是IVAR,但默认情况下a没有隐式创建setter/getter。 您可以通过执行以下操作来访问

if (a.text.length == 0) { ... }
我们称之为直接访问

但是对于b,我们使用self。有权访问它

if (self.b.text.length == 0) { ... }
通过使用self.,您表示希望使用setter/getter方法访问b

如果您没有像下面这样直接显式地合成它,您甚至可以通过访问_b来选择不使用setter/getter:

if (_b.text.length == 0) { ... }

在大括号内声明IVAR,在大括号外声明属性。第二个示例将通过在大括号内声明属性产生语法错误。来自另一个人nmh的响应正确吗?最初,示例中的代码将a和B作为标签,C是文本字段。标签在大括号内,而文本字段在外部,就像在第二个链接中一样,只是A和B是标签。我改变了它,使A和B变成了文本字段,所以我不知道为什么会在大括号之外产生语法错误。你是说标签是ivar,而文本字段是属性?为什么会这样?我想你应该看看这个:setter和getter只是设置或获取ivar的值……什么是直接访问?