iOS KVC

1. KVC简介

  • 键/值编码中的基本调用是-valueForKey:-setValue:forKey:方法
    1
    2
    3
    4
    5
    NSString *name = [car valueForKey:@"name"];
    valueForKey:会首先查找以参数名命名(格式为_name或_isName)的getter方法
    如果没有这样的getter方法,它将会在对象内寻找名称格式为_name或name的实例变量
    另外KVC会自动装箱和开箱标量值,也就是说,当使用-setValue:forKey:,它自动将标量值(int、float和struct)放入NSNumber或NSValue中;
    当时用-valueForKey:时,它自动将标量值从这些对象中取出,仅KVC具有这种自动装箱功能,常规方法调用和属性语法不具备该功能
    2. KVC键路径
  • 键路径的基本调用是-valueForKeyPath:-setValue:forKeyPath:方法
    1
    2
    [car setValue:[NSNumber numberWithInt:155] forKeyPath:@"engine.horsepower"];
    NSLog(@"horsepower is %@", [car valueForKeyPath:@"engine.horsepower"]);
    3. KVC快速运算
  • 键路径不仅能引用对象值,还可以引用一些运算符来进行一些运算,例如能获取一组值的平均值或返回这组值中的最小值和最大值
    1
    2
    3
    4
    5
    [garage valueForKeyPath:@"cars.@count"];
    [garage valueForKeyPath:@"cars.@sum.mileage"];
    [garage valueForKeyPath:@"cars.@avg.mileage"];
    [garage valueForKeyPath:@"cars.@min.mileage"];
    [garage valueForKeyPath:@"cars.@max.mileage"];
    4. setter和getter方法命名规则
  • setter方法根据它所更改的属性名称来命名,并加上前缀set,如:setName: 、setEngine:
  • getter方法则是以其返回的属性名称命名,如:name、engine等,不要将get用作getter方法的前缀
  • 补充知识:get这个词在Cocoa中有着特殊的含义,如果get出现在Cocoa的方法名称中,就意味着这个方法会将你传递的参教作为指针来返回数值。例如,NSData中有一个getBytes:方法,它的参数就是用来存储字节的内存缓冲区的地址。如果你在存取方法的名称中使用了get,那么有经验的Cocoa编程人员就会习惯性地将指针当做参数传入这个方法,当他们发现这不过是一个简单的存取方法时就会感到困惑

5. setValue和setObject的区别

  • setObject:ForKey:NSMutableDictionary特有的;setValue:ForKey:KVC的主要方法
  • 总结两者的区别:
  • setObject: forkey:object是不能够为nil
  • setValue: forKey:value能够为nil,但是当valuenil的时候,会自动调用removeObject: forKey:方法
  • setValue: forKey:key的参数只能够是NSString类型
  • setObject: forKey:key可以是任何类型
  • 注意:setObject: forKey:对象不能存放nil要与下面的这种情况区分:
    [imageDictionary setObject:[NSNullnull] forKey:indexNumber];
    [NSNull null]表示的是一个空对象,并不是nil
  • setValue: forKey:方法调用者是对象的时候, setValue: forKey:方法是在NSObject对象中创建的,也就是说所有的OC对象都有这个方法,所以可以用于任何类

6. 正确比较字符串

  • 比较字符串是否相等,应该使用isEqualToString:,而不能仅仅比较字符串的指针值;==运算符只判断两个字符串的指针数值,而不是它们所指的对象
-------------本文结束感谢您的阅读-------------
最近的文章

iOS 应用商店评分StoreReview

应用中引导用户去进行应用评论常用的方法大概有以下几种: 使用deepLink;在app地址链接后边拼接上action=write-review可以直接跳转到App Store应用中对应的应用评价界面进行评价 使用SKStoreReviewController;在iOS 10.3之后,iOS提供了一 …

继续阅读
更早的文章

iOS APNS device token特性

device token的一些特性: 开发环境获取的deviceToken和发布环境获取的deviceToken是不一样的 在一台设备中,deviceToken是系统级别的,不同App获得的deviceToken是相同的 deviceToken会过期 单个App的更新deviceToken不会 …

继续阅读