OC属性Property-(摘要)

原创 2015年11月18日 10:16:54
1.属性
//属性:为你自动生成setter和getter
//能在⼀定程度上简化程序代码,并且增强实例变量的访问安全性

//属性声明的写法
//@property 数据类型 实例变量名;

//属性实现的写法
//@synthesize 实例变量名;

2.属性的修饰符
//修饰符, 实质是对setter和getter方法的限定

//(1)线程安全组
//nonatomic: 非原子性(不对多线程进行管理, 效率高)
//atomic: 原子性(在多线程下使用, 保证线程安全, 但效率会很低)
//注:a.默认值:atomic, 一般使用nonatomic
// b.atomic修饰的属性, 要么同时重写setter和getter, 要么都不重写; 不允许只重写其中一个方法

//(2)内存管理组
//assign(默认值)
//retain
//copy
//weak
//strong

//week和strong在ARC下才能够使用
//基本数据类型用assign
//对象用retain, weak, strong
//既是对象, 并且对象遵循协议, 才能使用copy
//注:delegate写成属性, 在ARC下用weak, 在MRC下用assign

//(3)读写组
//readwrite(默认值)可读写, 生成setter和getter
//readonly:只读, 只生成getter

//(4)方法重命名组
//setter=方法名
//getter=方法名
//注:重新修改setter和getter的名字, 不影响点语法的使用

3.点语法
//点语法是setter 和 getter的快捷调用方法
//属性是⼀对getter、setter方法,点语法是属性的另一种调用格式
//如果点语法出现在赋值等号的左侧, 调用setter; 其他位置, 调用getter

4.KVC
//KVC(Key-Value-Coding),键值编码,是一种间接访问实例变量的方法
//设置
[man setValue:@"lisi" forKey:@"name"];
//获取
NSLog(@"%@", [man valueForKey:@"name"]);

//通过KVC访问属性, key是属性名, 如果key写错, 会导致程序崩溃
NSLog(@"%@", [man valueForKey:@"anme"]);
[man setValue:@"aaa" forKey:@"mena"];

//当key不存在的时候,会执⾏setValue:forUndefinedKey:

Man *man1 = [[Man alloc] initWithName:@"王五" work:@"家里蹲" age:25];
NSLog(@"%@", man1);

//KVC通过字典对多个属性赋值
Man *man2 = [[Man alloc] init];
NSDictionary *dic = @{@"name":@"123", @"age":@26, @"work":@"学习"};
[man2 setValuesForKeysWithDictionary:dic];
NSLog(@"%@", man2);

Father *father = [[Father alloc] init];
father.work = @"移动互联";

Son *son = [[Son alloc] init];
son.play = @"玩球";

father.son = son;
NSLog(@"%@", [father valueForKey:@"work"]);
NSLog(@"%@", [son valueForKey:@"play"]);
NSLog(@"%@", [father.son valueForKey:@"play"]);
NSLog(@"%@", [[father valueForKey:@"son"] valueForKey:@"play"]);

//通过keypath访问属性(可以使用点语法)
NSLog(@"%@", [father valueForKeyPath:@"son.play"]);
//通过keypath设置属性
[father setValue:@"玩气球" forKeyPath:@"son.play"];

Father *father1 = [[Father alloc] init];
father1.work = @"卖糖葫芦";
Son *son1 = [[Son alloc] init];//Son *son1;//对象没有开辟内存, 初始化, 对其设置属性或调用方法, 都是无效的
son1.play = @"和尿泥";
father1.son = son1;
NSLog(@"%@", [father1 valueForKey:@"work"]);
NSLog(@"%@", [son1 valueForKey:@"play"]);

Girl *girl1 = [[Girl alloc] init];
girl1.age = 16;

Girl *girl2 = [[Girl alloc] init];
girl2.age = 18;

Girl *girl3 = [[Girl alloc] init];
girl3.age = 20;

NSArray *array = @[girl1, girl2, girl3];

//KVC在数组中的使用
NSLog(@"%@", [array valueForKey:@"@count"]);
NSLog(@"%@", [array valueForKeyPath:@"@max.age"]);
NSLog(@"%@", [array valueForKeyPath:@"@min.age"]);
NSLog(@"%@", [array valueForKeyPath:@"@avg.age"]);
NSLog(@"%@", [array valueForKeyPath:@"@sum.age"]);
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Hongyang 生命不息,奋斗不止,万事起于忽微,量变引起质变 目录视图 摘要视图 订阅 Android 属性动画(Property Animation) 完全解析 (上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1、概述 Android提供了几种动画类型:View ...

OC中的实例变量(Instance Variable)与属性(Property)

OC中的实例变量(Instance Variable)与属性(Property)在工程中新建一个XYZPerson类,如下所示:#import @interface XYZPerson : NSObj...

OC基础之-Property(属性)和点语法

学习属性之前回忆一下之前学到的setter方法和getter方法: (1)setter方法的作用:用来为单一的实例变量赋值(只能是一个实例变量,多了的叫做get方法) (2)sette...

OC属性property

声明property语法为@property(参数1,参数2,参数3)类型 名字; 例如:@property (assign)int age; 相当于定义了下面俩个方法: - (int) age...

OC-属性property

属性:自动生成setter和getter 声明:@property 数据类型 实例变量名 属性实现的写法,如果类型相同,可以用,隔开,但是类型如果像NSString这种类型的实例变量,需要加* ...

iOS开发之OC篇(11)—— Class(类)、@property属性

如何创建自己的类。 点语法 @property属性 属性修饰符

iOS OC内存管理、ARC、property属性、__strong、__weak、__block——iOS 编码复习(一)

首先来聊聊内存管理。因为是先有了内存管理这个东西,才慢慢的有了ARC,而后才会有@property的各种属性 聊到内存管理,我们就能知道iOS5之前,iOS的内存管理是MRC(手动内存管理)的。iOS...

OC 实例变量(instance var)与属性(@property)的关系

01).@property01>.自动生成getter 和 setter 方法的声明自动给当前类生成一个私有属性(在@implementation中),这个属性名称自带下划线 自动生成getter ...

iOS runtime探究(三): 从runtime开始理解OC的属性property

你要知道的runtime都在这里转载请注明出处 http://www.jianshu.com/p/0623addb6b74本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇...

oc的内存管理和@property的属性关键字

我们来看看内存分布 栈:存放的是局部变量,这块存储区域是系统管理的,不需要我们管理。 堆:存放的是OC中的对象,这块存储区域是程序员自己管理的。它是动态存储区域。 常量区:存放的是常...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)