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"]);
版权声明:本文为博主原创文章,未经博主允许不得转载。

OC中关于属性的一些基本定义

属性介绍: 属性是OC-2.0之后出现的语法,为实例变量提供setter、getter方法的默认实现 属性的出现简化了程序代码量,并且增强了实例变量访问的安全性 属性的属性: 给属性提供了一些...
  • zhangshichi
  • zhangshichi
  • 2015年11月12日 17:24
  • 862

OC 成员变量和属性的区别 .

转自:http://blog.sina.com.cn/s/blog_727bd1560101llwj.html 比如下面这个程序,aboutList,和 otherList 到底有什么不同, ...
  • huang2009303513
  • huang2009303513
  • 2014年08月08日 21:38
  • 20317

OC中@property的所有属性详解

1,assign : 简单赋值,不更改索引计数 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a...
  • xr_rr
  • xr_rr
  • 2014年10月04日 09:46
  • 884

OC运行时语言--如何给一个分类添加属性

今天试着给一个分类添加一个属性新建一个Person类后,又建了一个Person类的分类,在分类的.h文件里添加了一个属性name(注意这里Person类是没有这个属性的) 在其他类中使用self调...
  • u010416360
  • u010416360
  • 2016年11月09日 14:52
  • 599

iOS开发-OC中属性创建需要注意的地方(property实例变量的创建和标准存取方法)

现在很多人都不太会使用属性,而且把控不住内存,导致崩溃异常等情况。用的时候不去思考怎么使用更加严谨,防止发生其他的情况。 那么我就说说property 的内存管理如何去把控防止出现糟糕的情况:...
  • u010905226
  • u010905226
  • 2016年08月04日 17:42
  • 574

iOS学习笔记1(结合项目)---oc的@property属性

“属性”(property)有两大概念:ivar(实例变量)、存取方法(access method=getter),即@property = ivar + getter + setter。 例如下面的...
  • jasonjwl
  • jasonjwl
  • 2015年10月26日 19:25
  • 1459

OC中block的使用及注意

基本概念 block是代码段,是一段允许执行的代码,有些编程语言将其称之为闭包(closure),是iOS4之后新增的语法, block兑现格式一个C级别的语法和运行机制,它与标准的C函数...
  • hanxujie00
  • hanxujie00
  • 2016年08月08日 11:28
  • 2189

iOS中属性化字符串

富文本的基本数据类型是NSAttributedString。**属性化字符串**(attributed string)是把属性设置到某些字符上的字符串。属性可以是任何键值对,但是为了实现富文本,则通常...
  • hnjyzqq
  • hnjyzqq
  • 2014年10月08日 19:18
  • 1772

OC键值监听(KVO)

// //  main.m //  OC键值监听(KVO) // //  Created by Goddog on 15/1/3. //  Copyright (c) 2...
  • HUXU981598436
  • HUXU981598436
  • 2015年01月03日 18:33
  • 950

OC中属性self.a与_a访问的区别

在OC中我们可以通过指令@property定义属性。 OC对属性封装了许多方法,同时也会自动实现一些方法,相比实例变量,感觉更加面向对象些。 一般定义属性的方法如下,在Class Test中定义属性i...
  • u013378438
  • u013378438
  • 2015年03月11日 16:39
  • 1328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC属性Property-(摘要)
举报原因:
原因补充:

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