四、Object-C 属性声明和点语法

Objective-C学习索引

一、属性是什么

属性(property):一个对象的属性或特性,OC中可以简单理解为类中的方法,和变量

属性声明变量

@interface Person : NSObject
@property NSString* name;
- (id)showClassName;
@end

@property NSString* name;声明在.h接口文件中。凡是用@property关键字属性声明过后。
1、自动生成实例变量。
2、自动生成访问方法。
3、更简单的调用方法,即“.”语法调用即可。
4、属性的内省(instrospection,java中叫反射)。通过内省可以动态查询属性的名称和类型。

@property NSString* name;

这一句话就类似于如下语句。平时大多直接写这样一句话就行了。

@interface Person : NSObject{
    NSString * _name;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
@end
@implementation Person
- (void)setName:(NSString *)name{
    _name = name;
}
- (NSString *)name{
    return _name;
}
@end
Person * p = [[Person alloc] init];
p.name = @"jack";

这样写后也可以使用“.”语法访问。注意语法格式
1、变量一定是“_”下划线在前面。
2、setName驼峰命名,一定要用setName。
3、get关键字不能加,只能写成name。
4、其它类似,只有这样写才能“.”语法访问,固定格式。

二、给属性指定选项

2.1、给属性制定选项的方法

@property(nonatomic,readonly,strong,retain,setter=setValue:) NSString * dadName;

@property可以跟()指定选项
1、显示指定方法名
setter = setValue: //setValue可以取别的名字
getter = value //value可以取别的名字
2、读写属性
readonly // 只读
readwrite / / 读写
3、赋值时的选项
assin // 单纯赋值
retain // 进行保持操作
unsafe_unratained // 同assin,用于ARC
strong // 同retarin,用于ARC
week // 弱引用,用于ARC
copy // 复制对象
3、原子性操作
nonatomic // 非原子性操作、非线性安全

2.2、选项的作用

由于OC应用于,手动引用计数、ARC和垃圾回收三种内存管理方式,根据管理方式的不同,关键字的作用也会不同。这里笔者只讲ARC情况下

选项名称基础数据类型对象类型
未指定任何选项直接赋值警告
assign、unsafe_unratained直接赋值直接赋值
retain、strong出错赋值并对新值进行retain
week出错弱引用
copy出错赋值时建立传入值的一份副本

2.3、点语法

OC中点语法的目的就是访问属性。
1、注意id类型,void类型和C中的数组类型不能用点语法。
2、点语法可以连用,比如 person.dog.name = @“jack”;
3、递增和点语法 temp = obj.age++; 相当于如下代码
[boj setAge:[obj age] + 1];
4、复合赋值表达式和点语法 obj.age *= 2;相当于如下代码
[boj setAge:[obj age] * 2];
5、self使用点操作符可以访问类中自己的方法。注意,不要在访问的方法中使用self,否则就会中造成无限循环递归,无法终止。
6、super 使用点操作符用来调用父类中的setter/geter方法。
7、类中没有参数的方法都可以用点操作符和getter一样调用。

    原文作者:Yink_Liu
    原文地址: https://www.jianshu.com/p/8a7d70ff5a69
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞