日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios开发ios9新特性关键字学习:泛型,逆变,协变,__kindof

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios开发ios9新特性关键字学习:泛型,逆变,协变,__kindof 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:如何去學(xué)習(xí)?都去學(xué)習(xí)什么?

1:學(xué)習(xí)優(yōu)秀項(xiàng)目的設(shè)計(jì)思想,多問幾個為什么,為什么要這么設(shè)計(jì),這么設(shè)計(jì)的好處是什么,還能不能在優(yōu)化 ,如何應(yīng)用到自己的項(xiàng)目中 2:學(xué)習(xí)優(yōu)秀項(xiàng)目的代碼風(fēng)格,代碼的封裝設(shè)計(jì)思想,為什么要這么設(shè)計(jì),這么設(shè)計(jì)的好處是什么,還能不能在優(yōu)化 ,如何應(yīng)用到自己的項(xiàng)目中,每行代碼都要用心去寫,每一行代碼都要力求使最簡潔的

3:學(xué)習(xí)別人遇到問題是如何分析問題,解決問題的方法是什么

4:遇到新東西應(yīng)該如何去學(xué)習(xí):1:先研究要學(xué)習(xí)的東西作用是什么 ,有什么好處 ?2:如何使用:具體的語法知識 ,參照蘋果的API 3:使用場景:一般在項(xiàng)目中有什么應(yīng)用。

5:最重要的就是花大量的時間研究優(yōu)秀的代碼,比別人想的深比別人想的遠(yuǎn),注意每一個細(xì)節(jié),把每一個細(xì)節(jié)都要搞懂,把每一個細(xì)節(jié)做到極致,花大量的時間去實(shí)踐練習(xí),將學(xué)習(xí)到的知識應(yīng)用于項(xiàng)目中。

?

二:nullable,?nonnull,null_resettable,_Null_unspecified 的關(guān)鍵字的認(rèn)識

/* 1:介紹怎么去研究新特性? 1.使用新的xcode創(chuàng)建項(xiàng)目,用舊的xcode去打開Xcode7 2015 iOS9Xcode6 2014 iOS8Xcode5 2013 iOS7Xcode4 2012 iOS61.出了哪些新特性 iOS9:關(guān)鍵字:可以用于屬性,方法返回值和參數(shù)中關(guān)鍵字作用:提示作用,告訴開發(fā)者屬性信息關(guān)鍵字目的:迎合swift,swift是個強(qiáng)語言,swift必須要指定一個對象是否為空關(guān)鍵字好處:提高代碼規(guī)劃,減少溝通成本關(guān)鍵字僅僅是提供警告,并不會報(bào)編譯錯誤*//* 2:nullable:nullable:1.怎么使用(語法) 2.什么時候使用(作用)nullable作用:可能為空nullable 語法1@property (nonatomic, strong, nullable) NSString *name;nullable 語法2 * 關(guān)鍵字 變量名@property (nonatomic, strong) NSString * _Nullable name;nullable 語法3@property (nonatomic, strong) NSString * __nullable name;*//* 3:nonnullnonnull:1.怎么使用(語法) 2.什么時候使用(作用)nonnull作用:不能為空nonnull 語法1@property (nonatomic, strong, nullable) NSString *name;nonnull 語法2 * 關(guān)鍵字 變量名@property (nonatomic, strong) NSString * _Nonnull name;nonnull 語法3@property (nonatomic, strong) NSString * __nonnull name;*//*4:null_resettable:null_resettable:1.怎么使用(語法) 2.什么時候使用(作用)null_resettable:必須要處理為nil情況,重寫get方法null_resettable作用:get方法不能返回nil,set可以傳入為空null_resettable 語法1@property (nonatomic, strong, null_resettable) NSString *name;- (NSString *)name{if (_name == nil) {_name = @"";}return _name;}*//*5:_Null_unspecified:不確定是否為空*//*6:1:關(guān)鍵字注意點(diǎn)在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間默認(rèn)是nonnull,一般前者寫在頭文件之下,后者寫在end之上2:關(guān)鍵字不能用于基本數(shù)據(jù)類型(int,float),nil只用于對象3: @property (nonatomic) NSString *name;如此寫法,默認(rèn)為strong修飾的*/#import "ViewController.h"@interface ViewController ()// nonnull // 沒有處理為空的情況 @property (nonatomic, strong, nonnull)NSString *name;@end@implementation ViewController//- (UIView *)view //{ // if (_view == nil) { // [self loadView]; // [self viewDidLoad]; // } // return _view //}- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. }@end

三:泛型

#import "ViewController.h"/*1:泛型介紹泛型:限制類型 為什么要推出泛型?迎合swift泛型作用:1.限制類型 2.提高代碼規(guī)劃,減少溝通成本,一看就知道集合中是什么東西泛型定義用法:類型<限制類型>:NSMutableArray<NSString *> *arr,數(shù)組里存放的都是字符串類型2:類的泛型聲明:泛型聲明:在聲明類的時候,在類的后面<泛型名稱>:@interface Person<ObjectType> : NSObject泛型僅僅是報(bào)警告泛型好處:1.從數(shù)組中取出來,可以使用點(diǎn)語法:數(shù)組中存放元素的類型為id類型, id是不能使用點(diǎn)語法,但是利用泛型,給其限制類型,則從數(shù)組中取出對象后,可以利用點(diǎn)語法2.給數(shù)組添加元素,有提示3: 泛型在開發(fā)中使用場景:1.用于限制集合類型:(集合類包括NSArray和NSSet,兩者用法相同,前者是有序的,而后者卻是無序的)為什么集合可以使用泛型?使用泛型,必須要先聲明泛型? => 如何聲明泛型自定義泛型?什么時候使用泛型?2: 在聲明類的時候,不確定某些屬性或者方法類型,在使用這個類的時候才確定,就可以采用泛型自定義Person,會一些編程語言(iOS,Java),在聲明Person,不確定這個人會什么,在使用Person才知道這個Person會什么語言如果沒有定義泛型.默認(rèn)就是id例如:1;聲明泛型#import <Foundation/Foundation.h>@interface Person<ObjectType> : NSObject// 語言@property (nonatomic, strong) ObjectType language;@end2:使用:Java *java = [[Java alloc] init];iOS *ios = [[iOS alloc] init];// iOSPerson<iOS *> *p = [[Person alloc] init];p.language = ios;// JavaPerson<Java *> *p1 = [[Person alloc] init];p1.language = java;*/#import "Person.h" #import "Java.h" #import "iOS.h" @interface ViewController ()@property (nonatomic, strong) NSMutableArray<NSString *> *arr;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];Java *java = [[Java alloc] init];iOS *ios = [[iOS alloc] init];// iOSPerson<iOS *> *p = [[Person alloc] init];p.language = ios;// JavaPerson<Java *> *p1 = [[Person alloc] init];p1.language = java; }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {}@end

四:泛型的協(xié)變和逆變

#import "ViewController.h"/* 1:泛型:限制類型 為什么要推出泛型?迎合swift泛型作用:1.限制類型 2.提高代碼規(guī)劃,減少溝通成本,一看就知道集合中是什么東西泛型定義用法:類型<限制類型>泛型聲明:在聲明類的時候,在類的后面<泛型名稱>泛型僅僅是報(bào)警告泛型好處:1.從數(shù)組中取出來,可以使用點(diǎn)語法2.給數(shù)組添加元素,有提示泛型在開發(fā)中使用場景:1.用于限制集合類型id是不能使用點(diǎn)語法為什么集合可以使用泛型?使用泛型,必須要先聲明泛型? => 如何聲明泛型自定義泛型?什么時候使用泛型?在聲明類的時候,不確定某些屬性或者方法類型,在使用這個類的時候才確定,就可以采用泛型自定義Person,會一些編程語言(iOS,Java),在聲明Person,不確定這個人會什么,在使用Person才知道這個Person會什么語言如果沒有定義泛型.默認(rèn)就是id用于父子類型轉(zhuǎn)換泛型:__covariant:協(xié)變, 子類轉(zhuǎn)父類 :也就是將子類的指針賦值給子類__contravariant:逆變 父類轉(zhuǎn)子類:也就是將父類的指針賦值給子類泛型注意點(diǎn):在數(shù)組中,一般用可變數(shù)組添加方法,泛型才會生效,如果使用不可變數(shù)組,添加元素,泛型沒有效果,只是提示的作用2:繼承:子類繼承父類后,父類可在.h中暴露方法例如初始化方法供子類去繼承 1:父類只暴露了初始化方法沒有重寫,子類繼承后,子類可以重寫,(子類在重寫時,盡量用self,不要用類名,避免其他類在繼承該類的時候,初始化得到的都是該類的對象,而不是繼承的子類的對象。)那么子類重寫后,在父類中的self就為子類的對象,其中多個子類繼承同一個父類的時候,父類可以提供一個get的標(biāo)識方法供子類重寫返回標(biāo)識,從而在父類中來區(qū)分不同的子類 2:父類提供方法,供子類繼承,父類在實(shí)現(xiàn)該方法,則子類在外部調(diào)用初始化方法的時候,就會調(diào)用父類中實(shí)現(xiàn)的初始化方法。(新浪參數(shù)模型抽父類繼承的例子),若是子類又重寫父類的初始化方法,調(diào)用super會執(zhí)行父類的方法,否則就不會執(zhí)行父類的方法,會覆蓋掉父類的方法,只保留子類的方法*/#import "Person.h" #import "Java.h" #import "iOS.h" @interface ViewController ()@property (nonatomic, strong) NSMutableArray<NSString *> *arr;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[_arr addObject:@"123"]; // _arr = @[@"213",@"213",@1];// Do any additional setup after loading the view, typically from a nib. iOS *ios = [[iOS alloc] init];Language *language = [[Language alloc] init];// 父類轉(zhuǎn)子類Person<Language *> *p = [[Person alloc] init];p.language = language;// iOSPerson<iOS *> *p1 = [[Person alloc] init];p1 = p;} // 子類轉(zhuǎn)父類 - (void)covariant {iOS *ios = [[iOS alloc] init];Language *language = [[Language alloc] init];// iOSPerson<iOS *> *p = [[Person alloc] init];p.language = ios;// LanguagePerson<Language *> *p1;p1 = p;}- (void)test {Java *java = [[Java alloc] init];iOS *ios = [[iOS alloc] init];// iOSPerson<iOS *> *p = [[Person alloc] init];p.language = ios;// JavaPerson<Java *> *p1 = [[Person alloc] init];p1.language = java;}@end

五:__kindof

#import "ViewController.h" #import "SubPerson.h"/*kindof:相當(dāng)于__kindof:表示當(dāng)前類或者它的子類',類設(shè)計(jì)歷史id:可以調(diào)用任何對象方法,可以作為參數(shù)或是返回值,不能進(jìn)行編譯檢查instancetype:自動識別當(dāng)前類的對象,只能作為返回值不能作為參數(shù),自動返回與當(dāng)前類類型相同的對象*/@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];/*** 當(dāng)父類提供初始化的方法的時候,子類繼承了父類的方法,若是子類SubPerson調(diào)用父類的初始化方法:person,則返回的是父類對象的類型,會出現(xiàn)警告,這時,可以在父類中定義的初始化方法用__kindof來修飾,表示當(dāng)前類或是其子類。+ (__kindof Person *)person;*/SubPerson *p = [SubPerson person];}@end

?

轉(zhuǎn)載于:https://www.cnblogs.com/cqb-learner/p/5868702.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的ios开发ios9新特性关键字学习:泛型,逆变,协变,__kindof的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。