码迷,mamicode.com
首页 > 移动开发 > 详细

iOS新特性

时间:2016-07-06 23:28:54      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

//1、声明属性可以为空的三种写法:

1、@property (nonatomic, copy, nullable)NSString *name;
2、@property (nonatomic, copy)NSString *_Nullable name1;
3、@property (nonatomic, copy)NSString *__nullable name2;

 //2、声明属性可以为空的三种写法:

1、@property (nonatomic, copy, nonnull)NSString *name4;
2、@property (nonatomic, copy)NSString *_Nonnull name5;
3、@property (nonatomic, copy)NSString *__nonnull name6;

注: 以上三种写法第一种写法用的最多,后两种基本不怎么用

//3、在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull

NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, copy, nullable)NSString *name;
 @property (nonatomic, copy)NSString *_Nullable name1;
 @property (nonatomic, copy)NSString *__nullable name2;
NS_ASSUME_NONNULL_END

 //4、在方法中的用法如下:

- (nonnull NSString *)test:(nullable NSString *)str;
- (NSString * _Nonnull)test1:(NSString * _Nonnull)str;
5、null_resettable的使用:
null_resettable: get:不能返回为空, set可以为空
如果使用null_resettable,必须重写get方法或者set方法,处理传递的值为空的情况如下(setter或getter实现其一即可)
@property (nonatomic, copy, null_resettable)NSString *name;
//实现setter方法
- (void)setName:(NSString *)name
{
    if (name == nil) {
        name = @"123";
    }
    _name = name;
}
//实现getter
- (NSString *)name
{
    if (_name == nil) {
        _name = @"123";
    }
    return _name;
}
6、声明数组中对象的类型:在类型后面增加<数据类型 *>,之后如果数据中插入非字符串类型会出现警告、崩溃
@property (nonatomic, strong)NSMutableArray<NSString *> *dataArray;
7、__kindof使用:__kindof:表示当前类或者它子类,
__kindof书写格式:放在类型前面,表示修饰这个类型(__kindof Person *),
__kindof  :在调用的时候,很清楚的知道返回类型。
注:当然也可以写+ (instancetype)person;返回值是instancetype就好了,
举例:新建一个Person类
//.h中
@interface Person : NSObject

+ (__kindof Person *)person;
+ (Person *)person1;

@end
//.m中
@implementation Person
//表示返回数据类型是person或其子类对象
+ (__kindof Person *)person{
    return [[self alloc] init];
}
+ (Person *)person1{
    return [[self alloc] init];
}
@end

//创建Person子类SonPerson
@interface SonPerson : Person @end

//此时SonPerson调用父类方法+ (__kindof Person *)person则返回SonPerson对象
//正常返回 
SonPerson *son = [SonPerson person];
//返回的对象是Person对象
SonPerson *son1 = [SonPerson person1];
8、__covariant(协变),__contravariant(逆变)
__covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类
__contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子类
实例:创建Language类,同时创建IOS、JAVA两个类继承自Language,在创建Person类,其中Person类代码:
#import <Foundation/Foundation.h>
#import "Language.h"
#import "IOS.h"

//声明泛型
@interface Person<__contravariant ObjectType> : NSObject
//语言
@property (nonatomic)  ObjectType language;
 //id:任何对象都能传进来
 //Language:在外面调用的时候,没有提示
 //IOS* 以后只能传对象
- (ObjectType)language;
- (void)setLanguage:(ObjectType)language; 
@end 

//controller中
 Person<Language *> *p = [[Person alloc] init]; 

Person<IOS *> *iosP = [[Person alloc] init]; 
// 如果子类想给父类赋值,协变
 iosP = p; 
// 泛型没有确定,就是id类型 
iosP.language = [[IOS alloc] init];

ps:暂时就是一些简单应用

 

iOS新特性

标签:

原文地址:http://www.cnblogs.com/czc-wjm/p/5648277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!