讲到属性, 首先我们应该想一下我们以前的 get / set 取值方法</span>
首先我们创建一个 类
#import <Foundation/Foundation.h>
<span style="font-family: Arial, Helvetica, sans-serif;">@interface Car : NSObject</span>
{
NSString *_name; <span style="font-family: Arial, Helvetica, sans-serif;">// 刚开始我们这样定义一个成员变量</span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span>
创建完成员变量, 我们开始对它进行 set / get 方法 赋值 / 取值
// set 方法
// 给_name赋值
- (void)setName:(NSString *)na;
get 方法
- (NSString *)name;
- (void)setName:(NSString *)a
{
_name = a; <span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">// 此时我们的 set / get 方法 是为了给成员变量赋值</span>
}
- (NSString *)name
{
return _name;
}
之后我们在主函数 (main函数) 中用该类的对象调用即可 // 我随意创建了个 Car类
Car *c = [[Car alloc] init];
[c setName:@"赋值"];
NSString *result = [c name];
这样我们即完成了对 _name 这个成员变量的取值以及赋值 但是不免感觉这样有点麻烦 于是接下来 我们决定使用属性
同样在 刚才的类的 .h 文件中 // .m 文件 和 主函数(main) 不用改变
#import <Foundation/Foundation.h>
@interface Car : NSObject
// {
// NSString *_name; // 将这些注释掉
// }
@property (nonatomic) NSString *name; // 新的 name 属性
之后我们在 主函数 (main) 中 NSLog(@"result = %@", result); 会发现结果依然和刚才一样
为什么失去了 _name 参数 get / set 方法不仅没有报错 而且输出的result结果也想相同?
我们可以这么理解 既是当我们创建了 属性时 系统自带的给我们提供了 对应的成员变量 所以在我们注释掉 _name时 程序仍能运行
同样 我们尝试把 在 .m文件中的 get / set 方法也注释掉 会发现结果仍然没变 所以可以理解为 创建属性的同时也顺带建立了 get / set 方法
所以能看出 写属性 能大量的简化代码