object-c新特性

作者: sprint | 来源:发表于2015-10-21 17:28 被阅读130次

继swfit2.0发布后,今年的WWDC介绍了几个object-c的新特性,虽然是看似都是为了配合swift的语言混合编程,但是还是有不少小惊喜。

1,Nullability
其实Xcode 6.3就已经支持了该特性,类似于swift中的Optional,object-c没有提供?和!的支持,但是新增了以下两个关键字:

@property (nonatomic, strong, nonnull) Sark *sark;
@property (nonatomic, copy, readonly, nullable) NSArray *friends;
+ (nullable NSString *)friendWithName:(nonnull NSString *)name;

nonnull:是不可为空
nullable:可为空
如果用来修饰变量前边还需加上__
- (void)startWithCompletionBlock:(nullable void (^)(NSError * __nullable error))block;
除了以上两个还有一个关键字为:null_resettable
表示为 setter nullable, getter nonnull 最直观例子就是 UIViewController 中的 view 属性
#@property (null_resettable, nonatomic, strong) UIView *view;
它可以被设成 nil,但是调用 getter 时会触发 -loadView
从而创建并返回一个非 nil 的 view。

2, Generics 泛型的支持

带泛型的容器

NSArray<NSString *> *strings = @[@"sun", @"yuan"];
NSDictionary<NSString *, NSNumber *> *mapping = @{@"a": @1, @"b": @2};

如果你试图向strings 存放非NSString类型 则会出现编译错误,当然当你获取strings的元素时返回给你的就是NSString类型,无需类型转换就可以使用。

自定义泛型类

@interface Stack<T> : NSObject
- (void)pushObject:(T)object;
- (ObjectType)popObject;
@property (nonatomic, readonly) NSArray<T> *allObjects;

这个 T
是传入类型的 placeholder,它只能在 @interface 上定义(类声明、类扩展、Category),我们还可以给 ObjectType 增加类型限制,比如:

// 只接受 NSNumber * 的泛型
  @interface Stack<T: NSNumber *> : NSObject
 // 只接受满足 NSCopying 协议的泛型
  @interface Stack<T: id<NSCopying>> : NSObject

__kindof

 @property (nonatomic, readonly, copy) NSArray<__kindof UIView *> *subviews;

UIButton *button = view.subviews.lastObject; 

上面的代码不会出现编译错误,id虽然也能解决但是不能为使用者指明类型,__kindof很好的解决了这类问题,既明确表明了返回值,又让使用者不必写强转。

参考:http://blog.sunnyxx.com/2015/06/12/objc-new-features-in-2015/

相关文章

  • object-c新特性

    继swfit2.0发布后,今年的WWDC介绍了几个object-c的新特性,虽然是看似都是为了配合swift的语言...

  • 懒人做开发系列:利用Object-C特性埋点

    懒人做开发系列:利用Object-C特性埋点 懒人做开发系列:利用Object-C特性埋点

  • Effective Object-C 52:1-5

    一、熟悉Object-C Object-C : 基于C语言基础 + 面向对象特性。 1.了解Object-C 的起...

  • iOS Runtime基础

    Runtime是Object-C的一种特性,本人并不感冒。不过这块内容却很流行,也是Object-C动态特性的来源...

  • Effective Object-C 52:23-28

    四、协议与分类 Object-C 语言特性: “协议” (protocol)、“分类”(Category) 23....

  • iOS 内存管理

    ARC ARC是 Object-C 编译特性, 不是运行时特性也不是垃圾回收机制, ARC 所做的只是在代码编译自...

  • Object-C 语言特性

    分类Category 1.分类的作用? 声明私有方法和使用 2. 编译时没有把方法添加到类 3. 把framewo...

  • JDK新特性书目录

    JDK1.4新特性 JDK1.5新特性 JDK1.6新特性 JDK1.7新特性 JDK1.8新特性

  • Object-C语言的特性

    一、分类 分类的作用: 声明私有方法, 分解大体积的文件。 分类是在编译的时候进行的。 一个类如果有多个分类文件。...

  • Object-C语言相关特性

    接下来主要讲一下OC语言的相关特性分别从以下几个方面进行讲解: 分类 扩展 关联对象 扩展 代理 通知 KVO K...

网友评论

    本文标题:object-c新特性

    本文链接:https://www.haomeiwen.com/subject/fzcthttx.html