1. #import與@class、#include三者有什麼相同與不同?
在上篇文章中專門有描述
補充一點:
@class與#import區別:
@class 避免循環引用,引用多為實體類頭文件
如果在a.h裡import了b.h,那麼所有import了a.h的文件都會同時與b.h產生編譯依賴,一旦b.h被修改,所有應用了a.h 的文件也要被重新編譯。如果可以使用前置聲明而不是import b.h,而是用@class,就可以解除這種依賴關系,b.h被修改,只import了a.h的文件就未必需要重新編譯。
2.在頭文件中聲明類函數時,-(void)print;
開頭的負號(-)通知Objective-C編譯器,該方法是一個實例方法。其他唯一的選擇是正號(+),它表示類方法。類方法是對類本身執行某些操作的方法,例如創建類的新實例。
3.import "Fraction.m"
…
Fraction *mFraction;
mFraction = [Fraction alloc];
mFraction = [mFraction init];
…
[mFraction release];
alloc是allocate的縮寫。因為要為新對象分配內存存儲空間。
將alloc消息發送給一個類時,便獲得該類的新實例,返回值(已分配的實際Fraction對象)存儲在變量mFraction中,alloc方法保證對象的所有實例變量都變成初始狀態。但是,這並不意味著該對象進行了適當的初始化進而可以使用。在分配對象之後,還必須對它進行初始化操作:
mFraction = [mFraction init];
這裡再次使用了一個並非自己編寫的方法。init方法用於初始化類的實例變量。mFraction將init消息發送給該對象自己,即,要在這裡初始化一個特殊的Fraction對象,因此它是沒有發送給類,而是給了類的一個實例。(Andy注:init函數寫的好奇怪,很好奇源代碼中init裡面是怎麼實現的???)
4.new方法可以將alloc和init的操作結合起來,Fraction *mFraction = [Fraction new];可分配和初始化新的Fraction。
5.NSLog中%x將用十六進制格式顯示一個值,該值不帶0x,並用a到f之間的小寫字符表示十六進制數字。要使用前面的0x顯示該值,使用格式字符%#x,
rgbColor = 0xFFEF0D;
NSLog("Color is %#x\n",rgbColor);
%e,使用科學計數法顯示數值
%f,使用浮點計數法顯示
%g,系統自行正確判斷是應該使用浮點計數法還是科學計數法來顯示浮點值。
6.OC編譯器默認將所有浮點數字看做double值,若手動定義float類型值,需要在數字後面加f或F:12.5f
7.如果直接把限定詞long、long long、short、unsigned、signed放在int聲明之前,那麼所聲明的整型變量在某些計算機上具有擴展的值域。例如 long int factorial;其中,long變量的具體精度是由計算機系統決定的(看計算機是多少位)
long double變量寫成尾部帶有字母l或L的浮點變量,1.233e+7L
同理在NSLog中%Lf用浮點表示法顯示long double的值,%Le用科學計數法顯示同樣的值,而%Lg將告訴NSLog在%Lf和%Le之間任選一個使用。
8.@synthesize關鍵字用於告訴Objective-C編譯器,為.h文件中聲明的實例變量生成一對設置函數方法和獲取函數方法。(setXXX(),getXXX() )。
摘自 安迪·潘 的專欄