语法结构 为成员变量服务
功能
1 . 给现有的成员变量生成一对 get set 方法
2. 如果没有声明对应的成员变量, 自动生成一个 _属性名 的私有成员变量( 受保护的)
写法
1. 声明成员变量 @property 实现中 synthesize
2. 不声明成员变量 声明 @property 实现中 声明 synthsize = 新名字
3 只声明 @propert 最简单的
不管如何使用, 属性方法 都只是一个 标签 不是内存中的数据, 真正的数据 其实 保存在 成员变量中(我们定义的 或者 自动生成的 )
属性关键字:
下面括号 中的就是 属性关键字
assign 默认关键字 或者 缺省关键字 基本数据 类型 的赋值
@property(strong, nonatomic) NSString* name; 引用类型
@property(assign, nonatomic) NSInteger weight; 值类型
引用类型 区分 MRC ARC
MRC 手动管理内存的时候的 属性关键字 retain copy
retain 对象属性声明 保留引用基数 (应用基数 +1)
copy 对象属性声明 重新拷贝一个新的副本
ARC 自动管理内存的时候的 属性关键字 strong
strong 对象属性声明 强指针 (本质上 和 retain 类似 引用基数 +1)
weak 对象属性声明 不增加对象的 引用基数
ARC 属性关键词 对 MRC 是兼容的 ,换句话说就是 在 ARC 也可以使用 MRC 属性关键字
上面五种属性 关键字 同时只能出现一个
//
// main.m
// 属性和方法
//
// Created by game912 on 2018/12/21.
// Copyright © 2018年 john. All rights reserved.
//
#import
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
// Person* P1 = [Person new];
//
// [P1 name];
// [P1 setName:@"大头"];
Person* P1 = [Person new];
P1.name = @"吃屎";
NSLog(@"%@", P1.name );
}
return 0;
}
//
// Person.h
// 属性和方法
//
// Created by game912 on 2018/12/21.
// Copyright © 2018年 john. All rights reserved.
//
#import
@interface Person : NSObject
{
NSInteger _age;
}
// 早期属性的用法
//第一种写法 三个步骤
// 1 声明一个变量 _age;
// 2 属性的声明 @property(assign, nonatomic) NSInteger age;
// 3 类的实现中 @synthesize age;
@property(assign, nonatomic) NSInteger age;//private 私有属性
// 早期属性的用法 自动生存一个 私有成员变量 _wight _属性名字
//第二种写法 二个步骤
// 1 属性的声明 @property(assign, nonatomic) NSInteger weight;
// 2 类的实现中 @synthesize weight;
// @synthesize weight = _myWeight; 这种方式 可以修改自动生成的变量名字
@property(assign, nonatomic) NSInteger weight;//private 私有属性
//属性 新的写法
//第三种写法 一个步骤
@property(strong, nonatomic) NSString* name; //private 私有属性
@end
//
// Person.m
// 属性和方法
//
// Created by game912 on 2018/12/21.
// Copyright © 2018年 john. All rights reserved.
//
#import "Person.h"
@implementation Person
@synthesize age;
@synthesize weight;
// @synthesize weight = _myWeight; //用于重命名
@end
@property(assign, nonatomic) NSInteger weight; 值类型
关键字 nonatomic atomic 都是和线程相关
这两个关键字 可以上面 赋值相关 关键字(5种)一起使用
可以和上面两种共存
@property(assign, nonatomic, readonly) NSInteger weight; 值类型