1.现在的编译器
@interface GBViewController :UIViewController
@property (nonatomic, strong) NSString *myString;
@end
这是编译器 会给我们默认生成getter/setter方法 而且 还会生成_myString的成员变量
以前属性的正常写法需要成员变量+ @property + @synthesize 成员变量三个步骤
@interface ViewController ()
{
// 1.声明成员变量
NSString *myString;
}
//2.在用@property
@property(nonatomic, copy) NSString *myString;
@end
@implementation ViewController
//3.最后在@implementation中用synthesize生成set方法
@synthesize myString;
@end
@interface MyViewController :UIViewController
{
NSString *name;
}
@end
在这段代码里面只是声明了一个成员变量,并没有setter/getter方法。所以访问成员变量时,可以直接访问name,也可以像C++一样用self->name来访问,但绝对不能用self.name来访问
属性 和成员变量 是两个东西
属性:Objective-C 声明属性特性提供了一个简单的方式来声明以及实现一个变量访问其方法
属性会生成 会给我们默认生成getter/setter方法 而且 还会生成_myString的成员变量
我们能否认为新编译器LLVM下的@property name==
老编译器GCC的 成员变量+ @property + @synthesize 成员变量呢name?
其实基本差不多的 就是 操作的成员变量不一样 前面是_name 后面是name而已
网友评论