5-19 Obejective-C中 属性(property)用法

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:@”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值