美文网首页
OC语言的新特性

OC语言的新特性

作者: 蜗牛也有梦想 | 来源:发表于2017-01-05 22:54 被阅读40次

几个新的关键字
__kindof
@property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *subviews;
这个属性是UIKit库里UIView.h头文件中声明的,使用带有这个修饰符的属性作为右值时,不用强转就可以赋给左值了。
UIButton * button = self.view.subviews.lastObject ;
之前没有__kindof的时候,上面的写法编译器会报黄⚠️。
需要写成 UIButton * button = (UIButton *) self.view.subviews.lastObject ;

nullable
UITableView.h 头文件中 对 dataSource 和 delegate 这两个代理的声明如下
@property (nonatomic, weak, nullable) id <UITableViewDataSource> dataSource;
@property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate;
null able 表示 可以没有,即TableView的这两个代理属性可以是没有的

nonnull
@property (nonatomic, strong, nonnull) Class * someInstance ;
这是一个测试的属性,用来nonnull 修饰符表示,someInstance 这个属性必须不为nil
可以在UITableView.h的一开始找到 NS_ASSUME_NONNULL_BEGIN
这个宏会默认把之后所有的对象默认都添加nonnull,除非手动添加了nullable。

泛型
@interface NSArray<__covariant ObjectType>:NSObject
上面的内容来自Foundation框架中的NSArray.h
定义了继承自NSObject的类,NSArray 其元素是ObjectType类型(__covariant后面再解释)
<ObjectType>就是泛型,用来限制NSArray元素的类型。
@property (nonatomic, strong) NSMutableArray<NSString *> * arr ;
声明了一个名字为arr的可变数组,其元素类型是NSString类型。
当arr中添加了不是字符串的类型 编译器会报黄⚠️。

泛型的协变 子类可以强转为父类的类型 关键字__covariant
@interface Test<__covariant ObjectType>:NSObject
Test<NSString *> * stringTest ;
Test<NSMutableString *> * mutableStringTest ;
stringTest = mutableStringTest ; 这样是可以赋值的,因为NSMutableString 是 NSString的子类
mutableStringTest = stringTest ; 这样编译器会⚠️

泛型的逆变 父类可以强转为子类的类型 关键字__contravariant
@interface Test<__contravariant ObjectType>:NSObject
Test<NSString *> * stringTest ;
Test<NSMutableString *> * mutableStringTest ;
stringTest = mutableStringTest ; 这样编译器会⚠️
mutableStringTest = stringTest ; 这样是可以赋值的,因为NSString是NSSMutableString的父类

相关文章

  • 我理解的runtime

    OC Runtime 对OC的理解与特性 OC是一门面向对象语言,既有静态语言的特性(C++),又有动态语言的特性...

  • OC语言的新特性

    几个新的关键字__kindof@property(nonatomic,readonly,copy) NSArray...

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

  • 面试总结

    OC的理解与特性 . OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率...

  • 第一章:熟悉OC

    OC语言特性:-1. OC是在C的语言基础上添加了面向对象特性。 -2. OC与C++,JAVA等面向对象的语言类...

  • ios基础知识MS2

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 知识点总结1

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 笔记《知识梳理》

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • ios 随便抄写

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • objc 知识

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

网友评论

      本文标题:OC语言的新特性

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