BOOL使用8位存儲,YES定義爲1,NO定義爲0,大於1不爲YES,跟標準C不同。
id是一種泛型,用於表示任何類的對象,id實際上是一個指針,指向其中的某個結構
@implementation是一個編譯器指令,表明你將爲某個類提供代碼
繼承(X是一個Y,isa)
Objective-C不支持多繼承,我們可以通過Objective-C的其他特性獲取多繼承的優點,例如分類和協議
方法調度
當代碼發送消息時,Objective-C的方法調度將在當前分類中搜索相應的方法,如果找不到,則在該對象的超類中進行查找
複合(X有一個Y,has)
if (self = [super init]) { //將[super init]得結果賦給self是Objective-C的標準慣例,爲了防止超類的初始化過程中返回的對象不同於原先創建的對象
setter方法根據他所要更改的屬性的名稱來命名,並加上set
getter方法根據其返回的屬性的名稱來命名,不要加get
3種方式可以創建新的NSRange
第一種:直接給字段賦值
NSRange range;
range.location = 17;
range.length = 4;
第二種:應用C語言的聚合結構賦值機制
NSRange range = { 17, 4 };
第三種:使用Cocoa提供的快捷函數NSMakeRange():
NSRange range = NSMakeRange(17,4);
- (NSComparisonResult) compare: (NSString *) string;
- (NSRange) rangeOfString: (NSString *) aString; //看字符串中是否包含其他字符串
- componentsSeparatedByString://切分NSArray
- componentsJoinedByString://合併NSString
保證內存佔用比較小的一種方法,分段處理
int i;
for (i = 0; i < 1000000; i++) {
id object = [someArray objectAtIndex: i];
NSString *desc = [object description];
// and do something with the description
}
節省內存的方法:
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
int i;
for (i = 0; i < 1000000; i++) {
id object = [someArray objectAtIndex: i];
NSString *desc = [object descrption];
// and do something with the description
if (i % 1000 == 0) {
[pool release];
pool = [[NSAutoreleasePool alloc] init];
}
}
[pool release]
//自動釋放池以棧的形式存在
創建類別
//如果你希望想一個array或者dictionary裏面添加一個個數字,你需要一個個的封裝,如果多,你會瘋掉,可以爲string類添加一個類別來完成這項工作
1)聲明對象 //與類的聲明格式類似
@interface NSString (NumberConvenience)
- (NSNumber *) lengthAsNumber;
@end // NumberConvenience
實現部分
@implementation NSString (NumberConvenience)
- (NSNumber *) lengthAsNumber
{
unsigned int length = [self length]; //獲得字符串的長度
return ([NSNumber numberWithUnsignedInt: length]);
} // lengthAsNumber
@end
第一:無法向類別裏面添加新的實例變量,類別裏面沒有位置容納實例變量
第二:若名稱衝突,類別的優先級更高
run循環
[[NSRunLoop currentRunLoop] run];
是一種cocoa構造,它一直處於阻塞狀態(即不執行任何處理),知道某些有趣的事情發生爲止
//這個run方法將一直運行而不會返回,後面的代碼將一直不執行
NSObject提供了一個名爲respondsToSelector:的方法,該方法訪問對象以確定其是否能夠響應某個特定的消息
NSData 和 char*的轉化
const char *string = "Hi there, this is a C string!";
NSData *data = [NSData dataWithBytes: string
length: strlen(string) + 1];
NSLog (@"data is %@", data); //輸出爲ascll碼
NSLog (@"%d byte string is '%s'", [data length], [data bytes]); //格式化輸出要的內容
[phrase writeToFile: @"/tmp/verbiage.txt" atomically: YES];的atomically 是用於通知cocoa是否應該首先將文件內容保存在臨時文件中,當文件保存成功後,再將該臨時文件和原始文件交換
Cocoa中提供NSPredicate的類,它用於指定過濾的條件