iOS新特性

//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:暂时就是一些简单应用

时间: 2024-12-18 22:58:17

iOS新特性的相关文章

iOS新特性引导页

有一个注意点: 获取版本号 个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中target,点击"Summary"后看到. Version在plist文件中的key是"CFBundleShortVersionString",和AppStore上的版本号保持一致,Build在plist中的key是"CFBundleVersion",代表build的版本号,该值每次build之后都应该增加1.这两个值都可以在程序中通过下面的

iOS 新特性分列式 之 iOS 9.1 - 主要内容:苹果笔 API 引入

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. ======================================= iOS 9.1 Live Photos Support for A

iOS 新特性关键字

1.用来修饰属性,或者方法的参数,方法的返回值 /** nullable:表示可以传空 */ //@property (nonatomic, strong, nullable) NSString *name; //@property (nonatomic, strong) NSString * __nullable name; //@property (nonatomic, strong) NSString * _Nullable name; /** nonnull: non:非  null :

ios新特性(泛型)

协变 子类转父类   逆变父类给子类赋值

iOS:新特性展示

+ (void)choseRootVC { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *saveVersion = [defaults objectForKey:@"CFBundleVersion"]; NSString *currentVersion = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion&qu

ios新特性sizeclasses的应用,以及ios7的适配问题

4s屏幕的适配: 运用sizeclasses的过程中,在做4s屏幕适配的时候,可以使用约束关系中的大于小于等于三种关系适配,添加多条约束条件,并且给每个约束条件设置1000.750.250三种优先级,合理运用比率关系以及视图的嵌套.通过这些操作,应该就可以适配4s屏幕 sizeclasses的IOS7适配问题: 使用sizeclasses的项目在IOS7的4s屏幕的模拟器上运行时,发现屏幕正常,但是在IOS7的4寸屏幕上时,出现上下黑边的情况,通过查阅资料发现,只需要添加一张名为[email p

在WWDC 2014上,没提到的iOS 8 八大新特性

title: The following iterative sequence is defined for the set of positive integers: n n/2 (n is even) n 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 40 20 10 5 16 8 4 2 1 It can be seen that thi

iOS开发——新特性OC篇&amp;IOS9 SDK新特性

iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍(@onevcat)对WWDC上透露的iOS 9 SDK新特性的总结,分享给广大的iOS开发者. 年年岁岁花相似,岁岁年年人不同.今年的 WWDC 一如既往的热闹,得益于 Apple 的随机抽选机制,这两年有更多的中国开发者有机会亲临现场进行体验,并与全球开发者取得更多的交流.更多的开发者可能只能在

iOS iOS8新特性-UIAlertController

iOS iOS8新特性--UIAlertController 1. iOS7及iOS7之前警告类控件有UIAlertView和UIActionSheet 1.1 UIAlertView的使用 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"这是一个UIAlertView" delegate:nil cancelButtonTitle:@"取消" oth