1.属性的声明
属性是容器和访问容器的操作做一个集成.申明属性后,不需要重写set和取值
NSInteger _age; //全局变量(成员变量)加下划线
2,
@property (assign /属性类型*/,nonatomic) NSInteger age;//属性名字可以与变量名字一样
@property (strong,nonatomic )NSString* name; //nonatomic防止意外,多线程交叉访问
@property (assign)NSPoint position;*
//assign:基本类型使用assign(绝对) –复制– assign != weak,不考虑内存
//strong(retain):对象类型属性使用strong(有条件) –增加持有,保证对象存在– retain == strong
NSString *str1 = [NSString stringWithFormat:@"abc"];
p.name =str1;//持有
//p.name = [NSString stringWithFormat:@"abc"];
包含3个部分
*1,与之匹配的成员变量_age ——》(外部用_age(_成员变量))
2,访问成员变量setter与getter方法
3,增加新的点语法访问方式*
- (instancetype)init {
self = [super init];
if (self) {
_age = 20;//没有直接申明,依旧可以使用
[self setAge:21]; //没有直接申明,依旧可以使用set和取值
NSInteger age1 = [self age];
self.age = 22; //额外增加更方便的点语法处理对象特征
[self setName:@"jh"];
_name = [NSString stringWithFormat:@"abc"];
NSString *_name1 = [self name];
self.name =@"jianghua";
}
return self;
}
3,
@synthesize age = _age; //将属性与成员变量关联
@synthesize name = _name;
4,属性的使用,点语法
/主函数调用/
Person *p = [[Person alloc] init];
p.age = 20;
[p setAge:20];
**点语法,一种分为设值,要么当作取值
p.age = 20; //设值
NSInteger age1 =p.age; //age1设值
[p setAge:20]; //age1取值
//扩展研究
//p.position.x = 2;//不能对结构体属性的某个成员赋值,只能赋值整个结构体
float x = p.position.x;//可以
5,属性关键字
//特殊关键字:
//nonatomic:nonatomic防止意外,多线程交叉访问,要么你赋值之前的,要么是赋值之后,不会出现赋值到一半,就被拿走。
//readonly:不能修改,只能初始化定义,在内部赋值
@property(strong,nonatomic,readonly)NSString *birthday;//interface
//main
_birthday = @"ac";
NSString *bithday1 =self.birthday;//读
//copy–特殊
2种情况
1,用在 NSString NSNumber == strong
2,用在 NSMutableString和NSMutableArray每次赋值重新分配对象,难!
unsafe_unretained,强调内容不持有,不安全,保证快速释放,网络请求,图片处理,大数据请求的地方。
//setter getter (特殊类型不确定,用set取值)
6,特殊属性及用法
//可变属性
@property (strong,nonatomic)NSMutableString *productName;//可调用对象
NSMutableString *string3 = [NSMutableString stringWithFormat:@"abc"];
p.productName = string3;
[string3 appendString:@"d"];//mutable的方法调用
NSLog(@"proName = %@",p.productName);
7,dealloc
//释放之前,对象内存清空之前
- (void)dealloc
{
//现将本类的属性释放,所有strong属性都需要release
[_name release];
[super dealloc];//再依次释放所有父类的属性
}
8,description
//描述
//被动方法:不会被主动调用
- (NSString *)description
{
//description中不能加NSLOG
NSString *descriptionPerson = [NSString stringWithFormat:@”