Objective-C 声明属性

创建: 2018/01/24

完成: 2018/01/25

 

遗留: TODO

 

声明属性(declared property)

 属性的声明与功能
 属性的声明

 @property 读写

 @property(readonly) 只可读

 ● 多个用逗号连接

 ● 也可以自己声明

 属性的实现

用@property声明的变量可以用@synthesize

 ● 多个用逗号连接

 ● 如果不带@synthesize, 内部属性名字变成_名字

 

@interface Sample : NSObject 
@property int sample;
@end

@implementation Sample
//内部为名为int _sample;
@end

    也可以在内部改名,  类内部用其他名称来使用

@synthesize value = runningAverage; //类内其他方法处该属性名字变为等号右边,外部不变

 ● 可读生成getter, 可读写生成getter, setter 

 ● 必须已经声明了@property

 ● 如果不需要接入类方法(getter, setter), 可以用@dynamic

   也可以不要

 

 @dynamic

 相关的getter, setter由自己实现

 不实现也不报错,但是调用时程序会崩溃

 属性的option

 指定多个用,隔开

 

种类opt 说明
 指定方法名

 getter=信息选择器

 setter=信息选择器

 改变系统默认的getter,setter名字
 读写属性 readonly 只读
 readwrite

 读写(默认)

 值的设定方法

 assign

 unsafe_unretained(ARC用)

 代入(默认)

 retain

 strong(ARC用)

 强参照, strong

 weak(ARC用) 弱参照
 copy 复制
 nonatomic

 atomic

 nonatomic

 默认不指定,相当于atomic, 保护改属性不会被多线程同时操作

 不同@sythesize,自己来实现的话声明里最好加上nonatomic

   
   
   
   
   
   

 

 值设定方法的选项  

# TODO: Supply [property属性的值设定方法选项的详细 p169]

# TODO: Supply [多线程 p480]

 属性的继承

 ● 可以重载getter, setter

 ● 除了readonly可以变成readwrite以外,@property必须一样

 ● 子类不能用@sythesize来实现父类的声明属性

 ● 类型, 协议内部可以有声明属性但不能有@sythesize, 在实现部(@implementation)处自己实现

# TODO: Supply [类型, 协议内部可以有声明属性但不能有@sythesize]

 不能和方法族重合

 用ARC时方法不能属于方法族

 alloc方法族

 copy方法族

 mutableCopy方法族

 new方法族

 init方法族

  
  点运算符获取属性
 相当于发出信息结论: 尽量不要用点运算符获取属性 
sample.var; // 获取 相当于 [sample val]
sample.val = n; // 设定 相当于 [sample setVal: n]
sample.method; // 不带参数的方法呼出方法, 不要这么用

 

点运算符读取

sample.var;

 

读取

[sample val];

 

点运算符设定

sample.val = n;

 

设定

[sample setVal: n];

 

注意: 

 ● 不能用在id类上

 ● 不能用在只有setter的上面

 

 

 ● 可以连续使用

n = obj.productionList.length;

 ● 可以连续代入

n = obj.count = obj.depth = ++n;

 ● 递减递减,复合代入运算符的解释

n = obj.length++;
//相当于
n = [obj setLength: [obj length] + 1];

n *= obj.length;
//相当于
n = [obj setLength: [obj length] * n];

 ● 类内部呼出声明属性方法

self.count = 12;

super.depth = maxDepth;

 ● 和构造体的点运算符混用

属性是构造体的时候

struct Sample a = ...; //构造体
obj.b = a;


obj.b.length = 5; 
//相当于
[obj b].length = 5;

 

 

 获取属性的方针

 ● 构造函数里面直接获取属性

 ● 内部函数的话,最好都用声明属性的方法,也可以直接获取。最好固定一种

  
  
  
  
  
  
  

转载于:https://www.cnblogs.com/lancgg/p/8339812.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值