Objective-C设置修改对象属性方法总结
2015-05-14 10:08
337 查看
方法一:手动编写相应的set和get方法
方法三:使用点语法访问
在对象存在setter方法时,无论对象是否存在相应的成员变量,程序都可以通过点语法来设置对象的属性。同样的,只要该对象有getter方法,无论对象是否存在相应的成员变量,程序可以通过点语法来获取属性值。(注意区分 成员变量 和 属性 这是两个不同的东西)
//main.c
#import"Person.h"
int main(int argc,char*argv[]){
@atuoreleasepool{
Person *person=[[Person alloc]init];
person.myNumber=10;
NSLog(@"person.myNumber");
}
}
方法四:键值编码(KVC: key Value Coding )
KVC允许以字符串形式间接操作对象的属性。由NSKey ValueCoding协议提供支持。最基本的操作属性的两个方法:
setValue:属性值 forKey:属性名:
为指定属性设置值
valueForKey:属性名 :
获取指定的属性的值
//main.c
#import"Person.h"
int main(int argc,char*argv[]){
@atuoreleasepool{
Person *person=[[Person alloc]init];
[person setValue:@"123" forKey:@"myNumber"];
NSLog(@"%i",[person valueForKey:@"myNumber"]);
}
}
下面深层解析一下setValue底层执行机制
(1)程序优先考虑调用 “setName:属性值”,代码通过setter方法完成设置。
(2)如果没有setName方法,KVC机制会搜索该类中名为 _name 的成员变量,然后对其赋值。与成员变量在什么地方(接口部分还是实现部分)申明没有关系,与访问控制修饰符无关。
(3)如果前两者都没有,KVC会去搜索名为 name的成员变量(与定义位置无关),与访问控制修饰符无关。
(4)如果上面三步都没有,系统会执行 setValue:forUNdefinedKey:方法,引发一个异常(NSUnknownKeyException),导致程序结束。
我们可以重写 setValue:forUNdefinedKey:方法,输出警告信息等。
valueForKey:@“name”执行顺序同setValue。
KVC除了可以操作对象的属性之外,还可以操作对象的“复合属性”,所谓的“复合属性”,KVC机制将其称为Key路径,如 item.name.
提供了两个方法:
setValue:forKeyPath:
valueForKeyPath:
[person setValue:@"456" forKeyPath:@"leg.length"]; //设置Person对象中leg属性的length值。
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { //声明一个变量 int myNumber; } -(int)myNumber; //get方法 -(void)setMyNumber:(int)_number; //set方法 -(void)printf; @end
// Person.m #import "Person.h" @implementation Person -(int)myNumber{ return myNumber; } -(void)setMyNumber:(int)_number{ myNumber=_number; }-(void)printf{ NSLog(@"myNumber is %d\n",myNumber); }@end
方法2:使用@property和@synthesize指令合成存取方法
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { //声明一个变量 int myNumber; } @property(nonatomic)int myNumer; //这样声明之后,会动态创建 -(void)printf; @end
// Person.m #import "Person.h" @implementation Person @synthesize myNumer; //自动合成
-(void)printf{ NSLog(@"myNumber is %d\n",myNumber); } @end
方法三:使用点语法访问
在对象存在setter方法时,无论对象是否存在相应的成员变量,程序都可以通过点语法来设置对象的属性。同样的,只要该对象有getter方法,无论对象是否存在相应的成员变量,程序可以通过点语法来获取属性值。(注意区分 成员变量 和 属性 这是两个不同的东西)
//main.c
#import"Person.h"
int main(int argc,char*argv[]){
@atuoreleasepool{
Person *person=[[Person alloc]init];
person.myNumber=10;
NSLog(@"person.myNumber");
}
}
方法四:键值编码(KVC: key Value Coding )
KVC允许以字符串形式间接操作对象的属性。由NSKey ValueCoding协议提供支持。最基本的操作属性的两个方法:
setValue:属性值 forKey:属性名:
为指定属性设置值
valueForKey:属性名 :
获取指定的属性的值
//main.c
#import"Person.h"
int main(int argc,char*argv[]){
@atuoreleasepool{
Person *person=[[Person alloc]init];
[person setValue:@"123" forKey:@"myNumber"];
NSLog(@"%i",[person valueForKey:@"myNumber"]);
}
}
下面深层解析一下setValue底层执行机制
(1)程序优先考虑调用 “setName:属性值”,代码通过setter方法完成设置。
(2)如果没有setName方法,KVC机制会搜索该类中名为 _name 的成员变量,然后对其赋值。与成员变量在什么地方(接口部分还是实现部分)申明没有关系,与访问控制修饰符无关。
(3)如果前两者都没有,KVC会去搜索名为 name的成员变量(与定义位置无关),与访问控制修饰符无关。
(4)如果上面三步都没有,系统会执行 setValue:forUNdefinedKey:方法,引发一个异常(NSUnknownKeyException),导致程序结束。
我们可以重写 setValue:forUNdefinedKey:方法,输出警告信息等。
valueForKey:@“name”执行顺序同setValue。
KVC除了可以操作对象的属性之外,还可以操作对象的“复合属性”,所谓的“复合属性”,KVC机制将其称为Key路径,如 item.name.
提供了两个方法:
setValue:forKeyPath:
valueForKeyPath:
[person setValue:@"456" forKeyPath:@"leg.length"]; //设置Person对象中leg属性的length值。
相关文章推荐
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- 工作总结 @Html 辅助方法 为 生成的 标签设置元素属性 htmlAttributes 一个对象,其中包含要为该元素设置的 HTML 特性。
- 在对象外部查看、获取、设置、判断对象的属性和方法
- 第192天:js---Date对象属性和方法总结
- js学习(一)-动态添加、修改、删除对象的属性和方法
- JQuery设置和去除disabled属性的5种方法总结
- PowerShell中文件对象的属性方法总结
- 动态映射objective-c的对象方法修改空指针
- Objective-C 基础,类和对象,方法和消息,已声明的属性和存取方法,块对象,协议和范畴类,预定义类型和编码策略
- 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Axis
- js对象属性方法大总结(收集)
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Axis
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Series
- Android 相对布局中的 代码中修改属性与布局文件的设置不同的解决方法
- Objective-C 类,对象,属性,方法
- 关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Series
- Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
- Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量