Objective-C设置修改对象属性方法总结
来源:互联网 发布:淘宝新店怎样打造爆款 编辑:程序博客网 时间:2024/04/29 00:10
方法一:手动编写相应的set和get方法
// 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值。
- Objective-C设置修改对象属性方法总结
- Objective-C对象属性设置
- Objective-C 类,对象,属性,方法
- Objective C语言----类,对象,方法总结
- Objective-C 方法、属性
- Objective-C 方法、属性
- Objective-C 方法、属性
- 动态映射objective-c的对象方法修改空指针
- iOS/Objective-C数字对象NSNumber方法总结
- Objective-C类,对象,方法
- Objective-C 【OC语法:不能修改 某个对象的 结构体属性的 成员】
- 【Objective-C】OC 中对象属性的设置器和访问器
- Objective-C常用方法总结
- Objective-C 两对象属性对拷
- Objective-C面向对象-Objective-C 对象,实例和方法
- Objective-c - 当属性的类型是oc对象的时候,setter方法的写法
- Objective-C - 类方法与对象方法
- 【Objective-C】类方法与对象方法
- python多重继承
- MySQL中的concat函数
- VC++调试技术
- JadClipse
- CSS/HTML改变鼠标指针形状方法 属性说明
- Objective-C设置修改对象属性方法总结
- hbase
- android中ImageView的内存问题
- hive
- Redis与RabbitMQ实现消息队列
- sqlite3 查找 所有表名字
- [Leetcode 16, Medium] 3Sum Closest
- Android输入文件路径,用户选择方式打开这个文件
- 金筱阮:影响黄金交易价格的主要因素