我们在上一节讲到 我们需要实例化对象然后 进行赋值 我们需要定义变量 然后定义和实现set get 方法 这写起来 很麻烦 ios 提供了属性生成器 给我方便简化我们的代码的书写
//
// Person.h
// Attributegenerator
//
// Created by xuqing on 2021/3/18.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
// 用属性生成器
@property NSString * name;
@property NSUInteger age;
@property NSString * sex;
@end
NS_ASSUME_NONNULL_END
我们只需要在我们的类的.h文件 中定义变量的时候 前面加上 @property 然我们再main.m的入口方法中直接 调用
//
// main.m
// Attributegenerator
//
// Created by xuqing on 2021/3/18.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person* person= [[Person alloc]init];
person.name=@"张冰";
person.age=22;
person.sex=@"女";
NSLog(@"%@", person.name);
NSLog(@"%zd", person.age);
NSLog(@"%@", person.sex);
}
return 0;
}
属性的约束
// 属性约束
// 1 线程安全相关(原子性)
// 2》atomic (原子操作)(默认)
// 》nonatomic(非原子操作)
//一般情况下 都使用》nonatomic 可以提高程序的执行效率
//2 内存管理相关
// 》MRC 下 retain (强引用),copy (强引用), assgin (弱引用, 赋值, 默认)
// 》ARC 下 strong(强引用) weak (弱引用)
// 3 读写属性相关
// 》 readwrite (同时生成setter 和getter 方法)默认
// 》readonly (只会生成 getter 方法)
//4 重命名相关
//》setter方法重命名 方法名车后必须附带一个 :
//》getter 方法重命名
我们直接实例化我们的person类 然后直接用点语法给我们类的属性分别赋值
image.png
我们观察日志的输出 我们通过属性生成器一样可以达到属性的赋值和取值大大的简化了我们的代码
网友评论