zoukankan      html  css  js  c++  java
  • ios9 的新特性

    1、关键字

    (好处:1、提高开发规范    2、在方法中才发挥一些作用

    1》在属性中使用关键字:

    1)nullable:可能为空。(在对象之前写一个这个标注,主要是了为了迎合swift语言)

               注意:只能使用对象类型,不能用于基本类型

               swift中都需要约束是否为空。

               swift是一个强语言,在编译的时候就会报错,弱语言就不会。

          书写方式一:(放在属性里面)

           书写方式二:

            书写方式三:(只有在测试版本的时候才这样敲)

    2)nonnull:非空 (get,set非空)

             书写方式一:

    计算机生成了可选文字:
NSString * _Nonnull name 
lonContr011er * _Nultab1e 
naviqationController 
qavigationltem * _Nonnull 
ndvx 
load.

             书写方式二:

             书写方式三:

             如果进入头文件,会发现很少用到nonnull这个关键字,但是在敲方法的时候,又会出现nonnull,

              苹果是这样做得:

    用一个宏:

    在这个宏之间的,都是默认是nonnull。

    3)null_resettable get方法中,为非空。在set方法中,可以为空

               注意点:必须处理为nil的情况

            书写方式一:

           get方法中,为非空。在set方法中,可以为空

    计算机生成了可选文字:
im lementation ViewCont roller 
NSString * _Nonnu11 name 
Incontrouer * _Nullable 
vigationController 
Ivigationltem * _Nonnull 
ationltem 
sel name 
SB , *pnonnull—

          用处:  有的时候,允许传得时候为空,但是返回值的时候必须有值!!!

    4_Null_unspecified:不确定

                 在用点语法的时候(会出现这个)

    2》在方法中使用关键字:(两个都可以)

    1)使用方法:

    计算机生成了可选文字:
// — (nonnull NSString 
return nil; 
— ( NSString * _NonnuII)test 
return nil;

    2ios9新特性之泛型

         1 作用:限制类型

          2)使用场景:1、用于集合、数组、字典、NSSet

                                            2、当声明一个类的时候,某个属性不确定类型,就可以使用泛型

          3)泛型的好处:提高开发的规范,一看便知道集合中是啥东东

    计算机生成了可选文字:
//— (void )observeValueF 
change: (N ictiona 
•ng ofObject: (id)object 
SString * , id:» ) change context: (void * ) context 
//— (void) touchesBegan: (NSSet UI Touch * touches withEvent: (UIEvent

          4)如何定义泛型:在类型后面限制,<限制类型>

    如果没有用泛型去定义的话,在下面方法调用中没有提示:

    计算机生成了可选文字:
(void)viewDidLoad 
(super viewDidLoad) ; 
// Do any additional setup after Loading the view, t) 
self. datas 
ad 
b ect (nonnull id) 
M void addObject (nonnutt 
addObjects rom r ray: nonnull NSArray * ) 
void

    定义泛型之后:

    计算机生成了可选文字:
// Do any additional 
self. d 
NSMutableArrycNSString * datas

    计算机生成了可选文字:
self. datas 
M void 
b' ect: (nonnull NSStrin * ) 
add 
add0bject: (nonnutt NSSt' ing

    而且还有一个好处:取东西的时候方便,可以用点语法,因为知道你取的东西不是id类型了。

    (id类型不能用点语法)

    如果不定义泛型,是这样取数据:

    如果定义了泛型,这样取数据

                  self.datas[0].length;

    注意:1、并不是任何对象都能使用泛型

                  2、泛型只用于方法调用

                  3、在不可变数组中,是没有意义的。

    自定义泛型:

    如果没有定义泛型,拿到属性的时候,只能用父类。

    计算机生成了可选文字:
(self. datas 
50 // 
Person *person 
erson. la 
Language * language 
length); 
Person al loc) init);

    我们的要求是以创建的时候,就知道有

    计算机生成了可选文字:
glass 
@interface PersoneObjectTyp» : NSObject 
@property (nonatomic, strong) language; 
@end

    在用的时候再去定义,

    计算机生成了可选文字:
java *java 
Java al loc) init); 
ttiOS al loc) init l; 
iOS *ios 
// os 
person alloc) init); 
person«iOS *person 
person. language 
ios; 
Java 
erson« ava *personl 
e jpvd; 
t (Person al loc J init);

    5)泛型关键字:(协变、逆变)

    1》协变:(向上转,子类转父类)

    计算机生成了可选文字:
Person«Language *p; 
iOS *ios I liOS aUocl init I ; 
Person«iOS I (person al loc) init) ; 
pl. language 
ios; 
Incompatible poinW types assigning to •

    这个时候,需要加一个强转:

    计算机生成了可选文字:
ante r face perkn 
bjectTyp» : NSObject 
covar an 
eproperty (nonatomic, strong) ObjectType language; 
@end

     

    2》逆变:(向下转,父类转子类)

    计算机生成了可选文字:
@interface Person 
con avariant ObjectType*• : NSObject 
ep roperty (nonatomic, strong) ObjectType language; 
@end

    计算机生成了可选文字:
Person«iOS — 
pl. language 
ios; 
cova r iant : , 
_cont ravariant : 
C (Person al loc) ;

          

    3、ios9新特性之 __kinof (UItableView)

           __kindof:相当于,修饰对象,用于返回值,描述返回的类型是当前类或者子类。

    从xcode5开始的时候,由原先的id变为instance。

    用id的坏处:

    1、id不能使用点语法。

    2、能调用任何对象的方法,导致不能进行编译检查

    所以在xcode5开始就会instance,因为instance会自动检测当前类的对象。

    但是不管用id还是instance,都不知道返回类型,所以又有了新的改进。

    当然如果你原先不传id,就直接传你想传得类型(person *),可是在创建子类的时候,会报错。

    Xcode7就出了一个新的特性:

    计算机生成了可选文字:
+ (_kihdof Person

    计算机生成了可选文字:
(Person 
SubPerson 
personl 
tsubperson 
* erson 
rson 
MJ _ kindof Person * person

    像在tableviewcell中,也有这样的情况,因为我们喜欢自定义cell,加了这个,就会返回我们想要的类型。

  • 相关阅读:
    ASP.NET的底层体系1
    MVC路由解析---IgnoreRoute
    HTTP协议详解(三)
    HTTP协议详解(二)
    HTTP协议详解(一)
    优化MySQL服务器
    知识管理系列---3.程序实现
    Linux上PHP加入环境变量
    php-fpm 服务
    centos 服务器编译安装apache+php
  • 原文地址:https://www.cnblogs.com/base0225/p/5032479.html
Copyright © 2011-2022 走看看