Object-C基礎總結
1.OC基本語法
1.手動編譯鏈接的方法:cc -c xx.m cc main.o - framework Foundation
2.實際上BOOL類型的變量:是1個有符號的char變量.
3.面向過程與面向對象:
面向過程:在遇到1個需求的時候,實現這個需求的每1個步驟都是自己寫代碼親自的去一步步的實現.這樣的解決問題的方式我們就叫做面向過程的方式.
面向對象:在遇到1個需求的時候,不要親自去實現而是找1個專門做這件事情的人來幫助我們搞定.這樣的解決問題的方式就叫做面向對象的解決方式.
類:類是對一羣具有相同特徵或者行爲的事物的1個統稱.抽象的.不能直接使用.
5.內存中的五大區域.
棧 存儲局部變量.
堆 程序員手動申請的字節空間 malloc calloc realloc函數.
BSS段存儲未被初始化的全局變量靜態變量.
數據段(常量區)存儲已被初始化的全局靜態變量常量數據.
代碼段存儲代碼.存儲程序的代碼.
6.類加載:在程序運行期間當某個類第1次被訪問到的時候.會將這個類存儲到內存中的代碼段區域.這個過程叫做類加載.
7.分組導航標記: #pragma mark分組名 #pragma mark - #pragma mark -分組名
2.封裝
1.NSString最常用的類方法和對象方法
+ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
+ (instancetype)stringWithFormat:(NSString *)format
length方法
- (unichar)characterAtIndex:(NSUInteger)index;得到字符串中指定下標的字符.
- (BOOL)isEqualToString:(NSString *)aString;判斷相等的方式.
- (NSComparisonResult)compare:(NSString *)string;比較字符串的大小.
3.繼承與多態
1.OC中的static關鍵字.
a. static不能修飾屬性也不能修飾方法.
b. static可以修飾方法中的局部變量.
2.Super只能訪問方法,不能訪問屬性。
3.里氏替換原則 --- LSP
子類可以替換父類的位置.並且程序的功能不受影響.
4.多態:指的是同1個行爲,對於不同的事物具有完全不同的表現形式.4.OC特有語法
1.取到存儲方法的SEL對象,SEL s1 = @selector(方法名);
1).先拿到存儲sayHi方法的SEL對象,也就是拿到存儲sayHi方法的SEL數據. SEL消息.
2).將這個SEL消息發送給p1對象.
3).這個時候,p1對象接收到這個SEL消息以後就知道要調用方法
4).根據對象的isa指針找到存儲類的類對象.
5).找到這個類對象以後在這個類對象中去搜尋是否有和傳入的SEL數據相匹配的.
如果有就執行 如果沒有再找父類直到NSObject
3.動態類型檢測判斷
1).判斷對象中是否有這個方法可以執行.
- (BOOL)respondsToSelector:(SEL)aSelector;最常用的是這個方法.
2).判斷類中是否有指定的類方法.
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
3).判斷指定的對象是否爲 指定類的對象或者子類對象.
- (BOOL)isKindOfClass:(Class)aClass;
BOOL b1 = [s1 isKindOfClass:[Person class]]; 判斷s1對象是否爲Person對象或者Person的子類對象.
4). 判斷對象是否爲指定類的對象 不包括子類.
- (BOOL)isMemberOfClass:(Class)aClass;
[s1 isMemberOfClass:[Student class]];
判斷s1對象是否爲1個Student對象.不包括Student的子類對象.
5).判斷類是否爲另外1個類的子類.
+ (BOOL)isSubclassOfClass:(Class)aClass;
- (instancetype)init
{
if(self = [super init])
{
//初始化當前類的屬性的代碼;
}
retrun self;
}
5.內存管理
1. 內存管理的原則
1). 有對象的創建,就要匹配1個release
2). retain的次數和release的次數要匹配.
3).誰用誰retain. 誰不用誰release. 誰負責retain誰就負責relase
4).只有在多1個用戶用的時候才retain少1個用戶使用的時候才release
2.野指針
C語言中的野指針:定義1個指針變量.沒有初始化.這個指針變量的值是1個垃圾值,指向1塊隨機的空間.這個指針就叫做野指針.
OC中的野指針:指針指向的對象已經被回收了.這樣的指針就叫做野指針.
3.在MRC的開發模式下.1個類的屬性如果是1個OC對象類型的.那麼這個屬性的setter方法就應該按照下面的格式寫.
- (void)setCar:(Car *)car
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}
還要重寫dealloc方法.
- (void)dealloc
{
[_car release];
[super delloc];
}
atomic nonatomic retain assign strong weak readonly readwrite setter getter
6. 使用命令使ARC MRC兼容 使用命令. -fno-objc-arc5.分類 延展 協議
1).將臃腫的類分爲多個模塊方便管理.
2).擴展1個類.
分類中可以寫@property但是隻會生成getter setter的聲明. 延展中寫@property會自動生成私有屬性也會生成getter setter的聲明和實現.
如果類的成員只希望在類的內部訪問,那麼就將其定義在延展中.
如果類的成員允許被外界訪問定義在本類的@interface中.
int (^myBlock3)(int num1,int num2);
8. block的實現int num3= num1 + num2;
return num3;
};
9. 協議protocol
作用:
1).專門用來聲明一大堆方法. (不能聲明屬性,也不能實現方法,只能用來寫方法的聲明).
2).只要某個類遵守了這個協議.就相當於擁有這個協議中的所有的方法聲明.而不用自己去定義.
10. @required 與 @optional 修飾協議方法是否必須實現11. 什麼是代理模式.
傳入的對象,代替當前類完成了某個功能,稱爲代理模式.
12. 利用協議實現代理模式的主要思路.
1).定義1個協議.裏面聲明代理類需要實現的方法列表.比如這裏的1個代理類需要實現wash cook方法.
2).創建1個代理類(比如豬豬)遵守上面的代理協議並實現方法
3).在需要代理的類中,定義1個對象屬性類型爲id且遵守代理協議的屬性.
4).在代理的類中,調用代理對象的方法.
6.Foundation框架的常用類與方法
1.NSString的方法
1. - (BOOL)writeToFile 字符串寫入文件
2. + (instancetype)stringWithContentsOfFile 從文件讀取字符串
3. 把路徑包含到URL中 NSURL *url = [NSURL URLWithString:@"xxxxxx"];
+ (instancetype)stringWithContentsOfURL: 通過URL讀取文件中的數據
4. - (BOOL)writeToURL: 寫入到URL指向的文件
2.關於NSRange CGPoint CGSize CGRect
1.NSRange range = [NSRange NSMakeRange(3,7)]; 創造一個range結構體變量並初始化
2.NSStringFromRange(range) 將一個結構體變成字符串輸出
3.CGPointMake CGRectMake CGSizeMake
3.NSMutableString 的方法
4.NSArray的方法
5.NSMutableArray的方法
6.NSDictionary的方法
7.NSMutableDictionary的方法
8.NSDate方法
7.NSFileManager相關
1.單例模式 NSFileManage *mng = [NSFileManager defaultManager];
2.打開文件時 先判斷是否存在 fileExistsAtPath: isDirectory:
再判斷是否有權限去讀寫 isWritableFileAtPath isReadableFileAtPath isDeletableFileAtPath
最後再去操作訪問文件
3.獲取信息的方法
拿到文件的屬性信息 attributesOfItemAtPath
拿到所有子孫文件目錄 subpathsAtPath
拿到所有一級子目錄 contentsOfDirectory
4.創建文件 creatFileAtPath
5.在指定目錄創建文件夾 creatDirectoryAtPath
6.copy文件 copyItemAtPath: toPath:
7.移動文件 moveItemAtPath: toPath:
8.刪除文件 removeItemAtPath: 直接刪除,不進廢紙簍
8.Copy與單例補充
1.copy調用了copyWithZone 方法 此方法定義在NSCoping協議中。可以自己重寫這個方法來自定義copy,要注意繼承NSCoping
2.alloc方法內部調用了allocWithZone方法 可以通過重寫allocWithZone來達到創建單例模式對象的目的,但要求提供類方法名,類方法名必須以shared或者default開頭