iOS9新特性

来源:互联网 发布:安全生产监察大队 知乎 编辑:程序博客网 时间:2024/06/11 03:06
iOS9新出的关键性:用来修饰属性。或者方法的参数,方法的返回值


nullable(可以传空)

好处:1.迎合swift  2.提高开发人员规范,减少程序员之间的交流

开发规范:在属性前定义一个宏


// nullable作用:表示可以为空

// nullable书写规范:
 
//方式一:
 
@property(nonatomic,strong,nullable)NSString*name;
 
//方式二:
 
@property(nonatomic,strong) NSString *_Nullablename;
 
//方式三:
 @property(nonatomic,strong) NSString *__nullablename;


// nonnull: non:null:
//  书写格式:
 @property(nonatomic,strong,nonnull)NSString*icon;
 
 
@property(nonatomic,strong) NSString *_Nonnullicon;
 
 @property(nonatomic,strong) NSString *__nonnull icon;


//方法中,关键字书写规范
- (nonnullNSString *)test:(nonnullNSString *)str;
- (NSString* _Nonnull)test1:(NSString* _Nonnull)str;

注意:iOS新出关键字non null,nullable只能修饰对象,不能修饰基本数据类型
@property(nonatomic,assign)intage;

   之间,定义的所有对象属性和方法默认都是nonnull



null_resettable: get:不能返回为空, set可以为空  如UIViewController中的View (self.view = nil;  但取view的值时不能为空)
- (UIView*)view
{
   
if (_view == nil) {
        [
selfloadView];
        [
selfviewDidLoad];
    }
   
   
return _view;
}
 //注意;如果使用null_resettable,必须重写get方法或者set方法,处理传递的值为空的情况
 
//书写方式:
 @property(nonatomic,strong,null_resettable) NSString *name;


 _Null_unspecified:不确定是否为空
   
书写方式只有这种
   
方式一
   
@property (nonatomic,strong) NSString *_Null_unspecifiedname;
   
方式二
    @property (nonatomic,strong) NSString *__null_unspecified name;



   _Null_unspecified:不确定是否为空


  不确定是用getter方法还是setter方法



泛型
//定义泛型:确定类型
@property(nonatomic,strong)NSMutableArray<NSString*> *array;

//泛型:限制类型

//开发中使用场景
//  *限制集合中的类型,注意:只能检测方法的调用,因为声明的泛型,只能放在方法中
//  *当一个类在声明的时候,某个对象的属性不确定,只有创建对象的时候才确定,可以使用泛型

//泛型书写格式:放在类型后面,表示限制这个类型.

//好处:
//提高程序员开发规范,减少交流成本。
//从数组或者字典取值,都是id类型,不能调用点语法,但是使用泛型,就可以了。

//自定义泛型:模仿数组

//需求:假设有个Person,这个人会编程语言,但是在定义的时候不确定,只有在创建对象的时候才确定。
// language属性的类型就有讲究了
// id类型:表示可以传任何对象
// Launguage类型,在赋值的时候没有提示
//泛型,声明泛型,在创建对象的时候,确定泛型,在赋值就有提示了。

//泛型中协变,逆变,用于转换类型
//默认带有泛型的变量,互相赋值有报警告,使用协变,逆变,就能解决.
//协变(__covariant):用于泛型数据强转类型,可以向上强转,子类可以转成父类
//逆变(__contravariant):向下转型父类转子类


__kindof 
  __kindof:表示当前类或者它子类
  __kindof书写格式:
   放在类型前面,表示修饰这个类型(__kindof Person *)
  __kindof  :在调用的时候,很清楚的知道返回类型
- (nullable__kindofUITableViewCell *)cellForRowAtIndexPath:(NSIndexPath*)indexPath;   // returns nil if cell is not visible or index path is out of range

 // id坏处: 1.不能在编译的时候检查真实类型
 //         2.返回值,没有提示



//会自动识别当前对象的类
// SonPerson
+ (
instancetype)person;

// __kindof Person *:表示可以是Person类或者它的子类
+ (
__kindofPerson*)person;

//仅仅表示只能是Person
+ (Person*)person1;


0 0
原创粉丝点击