1.手動編譯鏈接的方法:cc -c xx.m cc main.o - framework Foundation
2.實際上BOOL類型的變量:是1個有符號的char變量.
3.面向過程與面向對象:
面向過程:在遇到1個需求的時候,實現這個需求的每1個步驟都是自己寫代碼親自的去一步步的實現.這樣的解決問題的方式我們就叫做面向過程的方式.
面向對象:在遇到1個需求的時候,不要親自去實現而是找1個專門做這件事情的人來幫助我們搞定.這樣的解決問題的方式就叫做面向對象的解決方式.
面向對象的解決問題的優點:後期的維護和修改十分方便. 4.對象:對象是現實生活中的1個具體存在.看得見、摸的著.拿過來就可以直接使用.
類:類是對一群具有相同特征或者行為的事物的1個統稱.抽象的.不能直接使用.
5.內存中的五大區域.
棧 存儲局部變量.
堆 程序員手動申請的字節空間 malloc calloc realloc函數.
BSS段存儲未被初始化的全局變量靜態變量.
數據段(常量區)存儲已被初始化的全局靜態變量常量數據.
代碼段存儲代碼.存儲程序的代碼.
6.類加載:在程序運行期間當某個類第1次被訪問到的時候.會將這個類存儲到內存中的代碼段區域.這個過程叫做類加載.
7.分組導航標記: #pragma mark分組名 #pragma mark - #pragma mark -分組名
8.數據類型:是在內存中開辟空間的1個模板.
1.NSString最常用的類方法和對象方法
+ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
+ (instancetype)stringWithFormat:(NSString *)format
length方法
-(unichar)characterAtIndex:(NSUInteger)index;得到字符串中指定下標的字符.
- (BOOL)isEqualToString:(NSString *)aString;判斷相等的方式.
- (NSComparisonResult)compare:(NSString *)string;比較字符串的大小.
2.匿名對象:如果我們創建1個對象,沒有用1個指針存儲這個對象的地址.也就是沒有任何指針指向這個對象那麼這個對象就叫做匿名對象。 3.對象與對象之間的關系.組合關系依賴關系關聯關系繼承關系1.OC中的static關鍵字.
a. static不能修飾屬性也不能修飾方法.
b. static可以修飾方法中的局部變量.
2.Super只能訪問方法,不能訪問屬性。
3.裡氏替換原則 --- LSP
子類可以替換父類的位置.並且程序的功能不受影響.
4.多態:指的是同1個行為,對於不同的事物具有完全不同的表現形式.1.取到存儲方法的SEL對象,SEL s1 = @selector(方法名);
2.內部的原理: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;
4.無論如何,記住重寫init方法的規范.- (instancetype)init
{
if(self = [super init])
{
//初始化當前類的屬性的代碼;
}
retrun self;
}
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];
}
4. 在ARC機制下.當對象被回收的時候.原來指向這個對象的弱指針會被自動設置為nil 5. @property的參數atomic nonatomic retain assign strong weak readonly readwrite setter getter
6. 使用命令使ARC MRC兼容 使用命令. -fno-objc-arc1).將臃腫的類分為多個模塊方便管理.
2).擴展1個類.
5. 延展 分類中只能新增方法.而延展中任意的成員都可以寫.
分類中可以寫@property但是只會生成getter setter的聲明.延展中寫@property會自動生成私有屬性也會生成getter setter的聲明和實現.
6. 延展天生就是來私有化類的成員的.如果類的成員只希望在類的內部訪問,那麼就將其定義在延展中.
如果類的成員允許被外界訪問定義在本類的@interface中.
7. block代碼塊int (^myBlock3)(int num1,int num2);
8. block的實現 int (^myBlock3)(int num1,int num2) = ^int(int num1,int num2){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).在代理的類中,調用代理對象的方法.
1. - (BOOL)writeToFile 字符串寫入文件
2. + (instancetype)stringWithContentsOfFile 從文件讀取字符串
3. 把路徑包含到URL中 NSURL *url = [NSURL URLWithString:@"xxxxxx"];
+ (instancetype)stringWithContentsOfURL: 通過URL讀取文件中的數據
4. - (BOOL)writeToURL: 寫入到URL指向的文件
5. - (NSComparisonResult)compare:(NSString*)string 字符串比較 返回一個枚舉類型 -1 0 1 其中NSOrderedAscending = 1 可以加參數來指定忽略大小寫 6. - (BOOL)isEqualToString: 判斷字符串是否相等 7. - (BOOL)hasPrefix - (BOOL)hasSuffix 判斷字符串是否以指定的字符開頭或結尾 8. - (NSRange)rangeOfString:(NSString*)String 在字符串中搜索子串 9.字符串的截取: -(NSString*)substringFromIndex: -(NSString*)substringToIndex: -(NSString*)substringWithRange:range 10:獲取指定下標字符:-(unichar)characterAtIndex:index 11.字符串轉化為其他數據類型:string.intValue string.doubleValue 12.將OC字符串轉化為C字符串 char *str1 = str.UTF8String; 將C轉化為OC +(instencetype)stringWithUTF8String:str1
1.NSRange range = [NSRange NSMakeRange(3,7)]; 創造一個range結構體變量並初始化
2.NSStringFromRange(range) 將一個結構體變成字符串輸出
3.CGPointMake CGRectMake CGSizeMake
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: 直接刪除,不進廢紙簍
1.copy調用了copyWithZone 方法 此方法定義在NSCoping協議中。可以自己重寫這個方法來自定義copy,要注意繼承NSCoping
2.alloc方法內部調用了allocWithZone方法 可以通過重寫allocWithZone來達到創建單例模式對象的目的,但要求提供類方法名,類方法名必須以shared或者default開頭