1. const與宏的區(qū)別
- 蘋果一直推薦我們使用const 而不是宏,
- 編譯時刻:宏:預(yù)編譯 const:編譯
- 編譯檢查: 宏沒有編譯檢查,const有編譯檢查
- 宏的好處: 定義函數(shù),方法,const不同
- 宏的壞處: 大量使用宏,會導(dǎo)致預(yù)編譯時間過長.
const作用
- 修飾右邊的基本變量或指針變量
- 被const修飾的變量只讀
static
- 修飾局部變量
- 修飾局部變量,延長生命周期,跟整個應(yīng)用程序有關(guān)
- 被static修飾的局部變量只分配一次內(nèi)存,程序一運行就會分配內(nèi)存
- 修飾全局變量
- 作用域會修改,只能在當(dāng)前文件使用
extern的作用
- 聲明外部全局變量,只能用于聲明,不能定義
- 原理:先會去當(dāng)前文件下查找有沒有對應(yīng)的全局變量,如果沒有,才回去其他文件查找
static NSString *const name = @"lili";
.h
extern NSString *const name ;
.m
NSString *const name = @"lili";
判斷一個字符串是否包含另個字符串
- 通用方法:
if ([currentText rangeOfString:text].location == NSNotFound) { // 不包含
isSelected = NO;
} else {
isSelected = YES;
}
* iOS 8 后可以使用- (BOOL)containsString:(NSString *)str NS_AVAILABLE(10_10, 8_0);
### 9 判斷一個字符串是否包含另個字符串
* 通用方法:
if ([currentText rangeOfString:text].location == NSNotFound) { // 不包含
isSelected = NO;
} else {
isSelected = YES;
}
- iOS 8 后可以使用- (BOOL)containsString:(NSString *)str NS_AVAILABLE(10_10, 8_0);
2.什么情況使用 weak 關(guān)鍵字,相比 assign 有什么不同碘举?
在ARC中,在有可能出現(xiàn)循環(huán)引用的的時候,往往要通過讓其中一端使用weak來解決,比如delegate代理屬性
不同點:weak此特質(zhì)表明屬性定義了一種非擁有關(guān)系,為這種屬性設(shè)置新值時,設(shè)置方法既不保留新值,也不釋放舊值.在屬性所指的對象遭到摧毀時,屬性值也會清空.assign的設(shè)置方法只會執(zhí)行針對純量類型的簡單賦值操作.
assign可以用非OC對象,而weak必須用于OC對象.