91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OC總結

發布時間:2020-09-24 04:36:22 來源:網絡 閱讀:359 作者:huangqinfen009 欄目:開發技術

1.類和對象

面向過程編程(Procedure oriented Programming, POP):以事件為中心,關心完成該事件的詳細步驟,一步一步如何實現
面向對象編程(Object Oriented Programming, OOP):以事物為中心,也就是參數事件的參與者,設計事物的功能,而完成事物只是事物的所有功能中的一個小功能

類:具有相同特征 和 相同行為的 事物的抽象
類是一個抽象的概念,在生活不具體
描述一個類:通過 特征(靜態屬性) 以及 行為(動態屬性,動作)

對象:是類的實例,也就是類的具體表現,視具體的,生活中的萬物都是對象
OC中方法的調用,采用消息發送機制

[receiver message]
receiver :消息的接受者,類或者對象
message  :消息也就是OC的方法

 類的定義分為兩部分:

(1)類的接口部分:提供外部訪問的借口,相當于使用說明書,寫在.h文件中.

a.以 @interface 開頭,以 @end 結束,只有把類的接口定義內容寫在開始和結束之間才有效

b.實例變量必須寫在大括號之內,而且大括號只能寫在實例變量

(2)類的實現部分:相當于功能的實現,寫在.m文件中.

a.@implementation 開頭 @end 結束,實現內容必須寫在中間才有效
b.@implementation 后的 Person 是要實現的類(需要指定要對哪一個類做實現)


.m.h文件和類沒有直接關系,文件中可以存放多個類,要類符合接口部分以及實現部分的定義格式就可以了

一般情況下,一個文件就定義一個類,而且文件的名字和類的名字一樣,這樣就能清晰的知道該文件中的類的名字


2.自定義初始化,setter方法,getter方法,實例變量的可見度

實例變量的可見度:

(1) @public:公共的,在任何文件中都可以訪問

(2)@protected:受保護的,有一定的訪問權限,只允許在本類文件以及子類文件中訪問,其他文件不可以訪問

(3)@private:私有的,只允許在本類文件中訪問,不可以在子類文件 以及其他文件中訪問

系統默認的可見度是@protected

自定義初始化

- (id)initWithBrand:(NSString *)brand;
- (id)initWithBrand:(NSString *)brand {
    _brand = brand;
    return self;
}

setter方法

- (void)setBrand:(NSString *)brand;
- (void)setBrand:(NSString *)brand {
    _brand = brand;
}

getter方法

- (NSString *)brand;
- (NSString *)brand {
    return _brand;
}


3.NSString和NSMutableString

(1)創建對象

a.便利構造器(+號方法)

NSString *str1 = [NSString stringWithFormat:@"iPhone%d", 5];

b.alloc+初始化方法

NSString *str2 = [[NSString alloc] initWithFormat:@"iPhone%d", 4];

length方法 求字符串長度

NSUInteger length = [str1 length];

characterAtIndex:方法 獲取字符串中的某個字符

判斷是否以指定的字符串開頭(hasPrefix:方法),或者以指定的字符串結尾(hasSuffix:)

rangeOfString:方法 查找指定字符串的范圍

字符串截取(獲取子字符串) substringFromIndex:方法 和 substringToIndex:方法

獲取指定范圍內的字符串 substringWithRange:方法

字符串拼接 stringByAppendingString:方法

替換字符串 stringByReplacingOccurrencesOfString:方法 和stringByReplacingCharactersInRange:withString:方法

字符串比較  compare:方法

字符串大小寫 uppercaseString方法 lowercaseString方法 capitalizedString方法

appendFormat:方法 deleteCharactersInRange:方法 insertString:atIndex:方法 replaceCharactersInRange:withString:方法


4.NSArray和NSMutableArray

arrayWithObjects:方法

count方法

objectAtIndex:方法

firstObject方法

lastObject方法

indexOfObject:方法

containsObject:方法

sortedArrayUsingSelector:方法

NSArray *sortArr = [arr2 sortedArrayUsingSelector:@selector(compare:)];

forin快速枚舉

for (NSString *str in arr2) {
    NSLog(@"%@", str);
}

addObject:方法

removeObjectAtIndex:方法

removeAllObjects方法

replaceObjectAtIndex:withObject:方法

exchangeObjectAtIndex:withObjectAtIndex:方法

sortUsingSelector:方法

[arr1 sortUsingSelector:@selector(compare:)];

重寫從父類繼承的方法description

當打印該類的對象時,系統會自動調用該方法

- (NSString *)description {
    //%g可以負略掉無用的零0
    return [NSString stringWithFormat:@"name:%@  price:%g", _name, _price];
}

5.NSDictionary和NSMutableDictionary

dictionaryWithObjectsAndKeys:nil方法 initWithObjectsAndKeys:nil方法 創建對象

allKeys方法             獲所有的key

objectForKey:方法               根據key獲取對應的value

removeObjectForKey:方法             刪除元素

setObject:forKey:方法              添加元素或修改key對應的value

先根據指定的key查找字典中是否存在相同的key,(查找字典中的是否存在指定的key) 如果存在,則修改key對應的value,如果不存在,在字典中添加一個元素,key-value鍵值對


5.NSSet和 NSMutableSet

anyObject方法 獲取集合中的某個元素

containsObject:方法 判斷集合中是否包含某個對象 

setWithObjects:nil方法  設置集合

removeObject:方法   移除元素


6.block

int (^block)(int x, int y) = ^(int x, int y) {
            return x + y;
        };  當把函數的實現賦給block變量之后,block變量就可以當做函數名使用

當在block內部使用block外部定義的(局部變量)時,如果 變量沒有被__block修飾, 則在block內部是readonly(只讀的),不能對它修改,如果想修改,變量前必須要有__block修飾
__block的作用告訴編譯器,編譯時在block內部不要把外部變量當做常量使用,還是當做變量使用
如果在block中訪問全局變量,就不需要__block修飾


7.屬性和點語法

用來替代setter以及getter方法,使用屬性可以快速創建setter以及getter方法的聲明,setter以及getter方法的實現,另外還添加了對實例變量操作的安全處理

@property只是自動聲明setter以及getter方法的聲明

@synthesize 屬性的實現部分,實現屬性自動生成的setter以及getter方法

如果將@synthesize省略,并且我們自己實現setter以及getter方法時,系統不會生成對應setter以及getter,還有實例變量

屬性的特性

 第一大特性:讀寫特性
   (1)readonly:告訴編譯器,屬性在自動生成方法時,只會生成getter方法,不會生成setter方法
   (2)readwrite:告訴編譯器,屬性在自動生成方法時,即要生成setter方法,也要生成getter方法,系統默認的讀寫特寫
   (3)setter = aa: 告訴編譯器,當自動生成setter方法時,setter方法的方法名為指定的名字aa:,不采用默認的
   (4)getter = bb 告訴編譯器,當自動生成getter方法時,getter方法的名字為指定的名字bb,不采用默認的
 第二大特性:原子性特性
   (1)atomic:原子特性,保證線程安全,內部做了安全處理(加鎖與解鎖),系統默認的原子特性
   (2)nonatomic:非原子特性,不保證線程安全,因為對于setter以及getter方法的使用,比較頻繁,在一段時間內可能要多次訪問,所以使用atomic會非常消耗系統的資源,降低程序的執行效率,使用nonatomic雖然不保證線程安全,但是使用一般情況下都是安全的,所以對于原子特性,使用nonatomic
 第三大特性:語義特性
   (1)assign : 直接賦值,使用針對于基本數據類型,也可針對于對象類型,系統默認的語義特性
   (2)copy : 針對于對象類型,并且要服從NSCopying協議的對象才可以 會復制出一個新的對象,擁有新的對象的所有權,(引用計數+1) (先暫時這么理解)
   (3)retain : 針對于對象類型,會造成對象的引用計數+1,


點語法,是一種快速訪問setter以及getter方法的方式,聲明屬性默認生成對應的setter以及getter方法,所以屬性和setter和getter方法都關聯

對象.屬性名  ---如果在等號的左邊,意味著調用setter方法,除此情況,都是調用getter方法


8.NSDate和NSDateFormatter

date方法  獲取當前時間

dateWithTimeIntervalSinceNow:方法  

timeIntervalSinceDate:方法

earlierDate:yesterdayDate方法 獲得兩個日期中較早的日期

laterDate:yesterdayDate方法 獲得兩個日期中較晚的日期

compare:方法 兩個日期比較

setDateFormat:方法

setDateStyle:方法

stringFromDate:方法


9.分類  協議  延展

分類,類目,category
目的 是為沒有源代碼的類添加方法,(只能添加方法,不能添加實例變量)
是擴充一個類的功能方式之一,為原有類擴充得方法會成為原類得一部分,使用即可

分類也分為.h(接口部分) 以及.m(實現部分)

協議 相當于一個任務清單,規定了要做的操作(只有一系列方法得聲明), 誰服從該協議,誰就要實現該協議中的方法.(完成任務清單)所以協議只有.h文件,沒有.m文件

<> 表示服從協議,服從的協議寫在<>之內

代理的語義特性為assign

@optional 可選的, 被他修飾的方法服從協議的類可以選擇實現(可以實現,也可以不實現)
@required 必須的, 被他修飾的方法服從協議的類必須選擇實現(沒有商量的余地)

延展 也是擴充類得的功能的一種方式,只不過延展擴充的內容是私有的,是在.m文件中定義的
延展即可以擴展方法也可以擴展實例變量,只不過都是私有的,外界無法直接訪問
延展是為有源代碼的類擴充內容 (Extension)


10.內存管理

內存管理基本原則:

如果你對一個對象進行alloc retain copy之后,你就擁有了該對象的所有權,你就必須對它進行release或者autorelease
內存問題:野指針異常  內存泄露

autorelease 會將聲明為autorelease的對象放入離他最近的自動釋放池中,當自動釋放池銷毀時,回向池中的每一個對象發送一個release消息

當該類的對象引用計數為0時,系統會自動調用該類的dealloc方法來回收空間,該方法是由系統自動調用,不能手動調用
驗證對象空間有沒有回收,只要查看該類的dealloc方法有沒有執行即可


屬性的內存管理

//setter getter 方法,內部是對實例變量賦值以及實例變量的屈指操作,所以方法內要操作實例變量
- (void)setTea:(Teacher *)tea {
    //判斷原有對象和新對象是否是同一個,如果是同一個,就沒有必要再重新賦值,否則 會先release, release之后空間被系統回收,此時再retain就成野指針問題了
    if (_tea != tea) {
        [_tea release]; //釋放保有的之前對象的所有權
        //讓實例變量保有新的對象的所有權
        _tea = [tea retain];
    }
}
//語義特性為copy,setter方法內部實現
- (void)setTea1:(Teacher *)tea1 {
    if (_tea1 != tea1) {
        [_tea1 release];
        //如果相對一個對象進行copy操作,對象的類必須服從一個NSCopying協議,并且實現協議中的方法
        _tea1 = [tea1 copy];
    }
}
- (void)dealloc {
    //當該類對象的引用計數為0時,會自動調用該類的dealloc方法
    //當調用dealloc方法時,該對象的空間將要被系統回收,在空間回收之前,將保有的其他對象的所有權釋放掉
    [_tea release];
    [_tea1 release];
    [super dealloc];
    
}

便利構造器的內存管理

+ (id)teacherWithName:(NSString *)name Gender:(NSString *)gender {
    Teacher *teacher = [[Teacher alloc] initWithName:name Gender:gender];
    return [teacher autorelease];
}

collocation 的內存管理

當把一個對象放在一個集合(數組,字典,集合)中時,會將對象的引用計數 +1,因為內部做了retain操作

當collocation(數組,字典,集合) 空間被回收時,他們會向容器中的每一個元素都發送一個release消息(對應添加元素時的retain操作)

當從collocation(數組,字典,集合)中移除一個元素時,會release該對象,引用計數-1


11.KVC

KVC : key-value-coding 鍵值編碼 是一種間接訪問實例變量的方式,通過指定的key來找到對應的實例變量(切記:key是字符串)
KVC的工作原理:根據指定的key,比如:name
(1)先查找該類是否有對應setter方法:比如setName:如果有,則通過setter方法給實例變量賦值,如果沒有,則轉到(2)
(2)查找該類有沒有一個_+key的實例變量,比如_name,如果有,則給_name賦值,如果沒有則轉到(3)
(3)查找該類是否具有一個和key同名的實例變量,比如name,如果有,則給name賦值,如果沒有,則轉到(4)
(4)如果都沒有找到,系統會拋出一個NSUnknownKeyException,說明沒有找到可匹配的key,(也就是該類既沒有setName:,也沒有_name,也沒有name)

setValue:forKey:方法

setValue:forKeyPath:方法

setValuesForKeysWithDictionary:方法

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨鹿县| 巴林右旗| 黄陵县| 曲沃县| 南昌市| 信丰县| 密山市| 蛟河市| 靖边县| 南阳市| 页游| 祁连县| 柘荣县| 西安市| 东宁县| 三原县| 左权县| 如皋市| 双峰县| 德格县| 尉犁县| 疏附县| 孝义市| 遵化市| 正蓝旗| 车致| 镇巴县| 南江县| 黄平县| 凌云县| 平舆县| 昆山市| 景谷| 定结县| 赤水市| 桑植县| 舟曲县| 长沙市| 察隅县| 金山区| 太康县|