2012年11月17日 星期六

神奇的@符號簡化語法

以前字符串可以這麼寫:
NSString *str = @"Hello";。

現在NSNumber也可以這麼寫:
NSNumber *number = @'H';
number = @1.2;
number = @YES;
number = @(60 * 60 * 24);

如果寫了這一行程式
id x = @42;

結果看到以下報錯
lit.m:3:8: error: initializer element is not a compile- time constant
id x = @42;
^~~

這到底是為什麼?因為對於整數是不能像字符串那樣處理的;這只是個讓程序員方便的語法而已,能讓我們創建一個autoreleased 的NSNumber物件。在Objective-C 11中,如果你定義下面這樣的macro,代碼如下:
#define N(x) _Generic((x), \
int : [NSNumber numberWithInt: x], \
float : [NSNumber numberWithFloat: x], \
double : [NSNumber numberWithDouble: x])

這個例子接受一個數值參數然後返回一個NSNumber的物件,以下的代碼都是等價的
x = N(12);
x = @12;

x = N(42.5);
x = @42.5;
x = N(42.5f);
x = @42.5f;

同理你也可以為long, longS以及long doubleS等等來擴展這樣的macro。甚至是更加複雜的數據。

自動合成屬性

在XCode 4.2之前的版本,我們在.h文件裡宣告屬性@property後,還需要在.m文件中合成@synthesize,很麻煩。

現在,我們只需要宣告 @property name 即可,Xcode會自動合成 @synthesize name = _name。
@property (attribute1, attribute2) propertyName;

與所有權有關係的屬性,關鍵字間的對應關係。
屬性值關鍵字所有權說明
strong __strong add reference to keep object alive
weak __weak object can disappear, become nil
unsafe_unretained __unsafe_unretained
copy __strong make copy on assign
assign __unsafe_unretained normal assign, no reference
retain __strong


nonatomic : make not hreadsafe, increase perf


strong
該屬性值對應 __strong 關鍵字,即該屬性所宣告的變量將成為物件的持有者。

weak
該屬性對應 __weak 關鍵字,與 __weak 定義的變量一致,該屬性所宣告的變量將沒有物件的所有權,並且當物件被破棄之後,物件將被自動賦值nil。

並且,delegate 和 Outlet 應該用 weak 屬性來聲明。同時,如上一回介紹的 iOS 5 之前的版本是沒有 __weak 關鍵字的,所以 weak 屬性是不能使用的。這種情況我們使用 unsafe_unretained。

unsafe_unretained 等效於__unsafe_unretaind 關鍵字宣告的變量;像上面說明的,iOS 5之前的系統用該屬性代替 weak 來使用。

copy
與 strong 的區別是宣告變量是拷貝物件的持有者。

assign
一般Scalar Varible用該屬性宣告,比如,int, BOOL。

retain
該屬性與 strong 一致;只是可讀性更強一些。

讀寫相關的屬性 (readwrite, readonly)

readwrite : create getter & setter (default)
readonly : create getter only

讀寫相關的屬性有 readwrite 和 readonly 兩種,如果使用ARC之後,我麼需要注意一下 readonly 屬性的使用。

比如下面的變量宣告。
@property (nonatomic, readonly) NSString *name;

一般宣告為 readonly 的變量照理說應該不需要持有所有權了,但是在ARC有效的情況下,將出現下面的錯誤信息 :
「ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute」
如果定義了ARC 有效,那麼必須要有所有者屬性的定義;所以我們的程式碼要改成這樣
@property (nonatomic, strong, readonly) NSString *name;

不過有一點,Scalar Variable 的變量都有 assign 的屬性定義,所以不需要給他們單獨的宣告。

iBooks Author 2.0開始支持 LaTeX 和 MathML

相信常和科技論文排版打交道的人對 LaTex 文檔排版系統不會感到陌生,為了更好的佔據教科書市場,蘋果最新更新的 iBooks Author 開始對LaTex以及MathML(另一種教科書常用的數學方程式及公司標記語言)提供支持。

也就是說,那些早已熟悉這類標記語的教育專家、數學家以及學生們可以輕鬆的通過iBooks Author 完成材料的編寫。而另一方面,對於希望在教育領域,尤其是教科書領域,有所建樹的蘋果來說,在軟件上滿足並迎合潛在的教育用戶們的需求無疑能在硬件上帶來更多的收穫。

2012年11月16日 星期五

蘋果2012第三季度財報總結

蘋果2012第三季度財報總結,iOS設備確實是蘋果的主要收入來源。



收入

iPhone:46%
iPad:26%
iPod:3%

iOS設備收入佔了公司總收入的75%。

OSX設備僅佔14%,不過是iOS設備的1/5。

自定義 iOS UI 的案例

iOS UI Patterns 網站:

http://pttrns.com/

iOS 6 韌體

iOS 6 直接下載韌體更新,位置如下:

iPad Wi-Fi (3rd generation)
http://appldnld.apple.com/iOS6/Restore/041-3515.20120919.OYzOG/iPad3,1_6.0_10A403_Restore.ipsw

iPad Wi-Fi + Cellular (model for ATT)
http://appldnld.apple.com/iOS6/Restore/041-7163.20120919.19UEI/iPad3,3_6.0_10A403_Restore.ipsw

iPad Wi-Fi + Cellular (model for Verizon)
http://appldnld.apple.com/iOS6/Restore/041-7161.20120919.5CyjO/iPad3,2_6.0_10A403_Restore.ipsw

iPad 2 Wi-Fi (Rev A)
http://appldnld.apple.com/iOS6/Restore/041-2187.20120919.vmGkW/iPad2,4_6.0_10A403_Restore.ipsw

iPad 2 Wi-Fi
http://appldnld.apple.com/iOS6/Restore/041-0804.20120919.9SgHU/iPad2,1_6.0_10A403_Restore.ipsw

iPad 2 Wi-Fi + 3G (GSM)
http://appldnld.apple.com/iOS6/Restore/041-7165.20120919.eZTyh/iPad2,2_6.0_10A403_Restore.ipsw

iPad 2 Wi-Fi + 3G (CDMA)
http://appldnld.apple.com/iOS6/Restore/041-7167.20120919.y2ard/iPad2,3_6.0_10A403_Restore.ipsw

iPhone 4S
http://appldnld.apple.com/iOS6/Restore/041-7181.20120919.lEuOK/iPhone4,1_6.0_10A403_Restore.ipsw

iPhone 4 (GSM)
http://appldnld.apple.com/iOS6/Restore/041-7175.20120919.wvv7Y/iPhone3,1_6.0_10A403_Restore.ipsw

iPhone 4 (CDMA)
http://appldnld.apple.com/iOS6/Restore/041-7179.20120919.bDw4g/iPhone3,3_6.0_10A403_Restore.ipsw

iPhone 3GS
http://appldnld.apple.com/iOS6/Restore/041-7173.20120919.sDDMh/iPhone2,1_6.0_10A403_Restore.ipsw

iPod touch (4th generation)
http://appldnld.apple.com/iOS6/Restore/041-0807.20120919.soT6X/iPod4,1_6.0_10A403_Restore.ipsw

2012年10月24日 星期三

iBooks 3 和 iBook Author 2.0 同步更新

在 Apple 產品發表會上,Apple 除更新了旗下一系列產品線外,亦為使用者和內容開發者分別推出 iBooks 3 和 iBook Author 2.0,即日起已可在 App Store 和 Mac Store 免費下載。

iBooks 3 的新功能包括,從 iOS 6 的書架上可透過 iCloud 檢視你所有從 iBookstore 購買的書籍、使用新的「捲視」主題後可以手指在書籍中垂直捲視、接收已購書籍的更新內容 (包含新的章節、修正內容和其他改進項目)、在 iOS 6 環境下可查詢德文、西班牙文、法文、日文和簡體中文的單字定義、在 Facebook、Twitter、訊息或郵件上與朋友分享您對於喜愛書籍的看法。