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檔案中宣告的例項變數生成一對設定函式方法和獲取函式方法。(set***(),get***() )。
iphone ipad 開發中遇到的常見錯誤
這個異常通常是由之前的錯誤 引起的,不會馬上中斷,而是導致其他正常執行的 發生異常,所以比較難除錯。常見的原因有 執行時出現下列異常導致程式退出 setvalue forundefinedkey this class is not key value coding compliant for the...
敏捷開發掃盲篇
在90年代末期,傳統軟體開發的方式因為其繁雜的過程,以及對文件的過於嚴格的要求,造成了很大程度上的效率下降,也就是人們所說的 重型化危機 因為這一原因,人們開始反思傳統方法的利弊,並對其弊端進行了改進,提出了敏捷方法。2001年2月,由martin fowler,jim highsmith等17位軟...
node開發掃盲貼
最近在學東西的時候發現自己對於package.json裡scripts中的內容理解不到位,所以重新系統的學習一下 npm 允許在package.json檔案裡面,使用scripts字段定義指令碼命令。npm 指令碼的原理非常簡單。每當執行npm run,就會自動新建乙個 shell,在這個 shel...