Bundle identifier
給app用的唯一名稱,app上架時會需要用的到
格式像com.companyname.appname
main nib file base name
appDelegate預設要使用的xib,如果有設,appDelegage會直接採用這個
如果沒有設定這個值,重建建一個空的,符合UIScreen的view(通常就是window),當做根view
@class
類別的型別宣告,不含介面、內容與實作
@class address;
會宣告一個名為address的類別,之後就可以用這個型別來宣告參照,但此時參照本身無任何可以拿來用的介面與可用的屬性
@categories
為已知的類別加入新的方法,通常是用括號來表示
@interface NSObject(EhancedObject)
@try @catch @finally
例外處理
KVC
[instance setValue:value forKey:@"key"];
類似指標的用法
Notifications
//發佈通知
-(void) postNotificationName:(NSString *) aName object:(id)anObj userInfo:(NSDictionary *)aUserInfo;
aName:通知名稱
aObj:通知物件
aUserInfo:參數集合
//註冊通知
-(void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id) anObject
observer:接收者
name:通知種類,nil表示接受所有的通知類型
anObject:發送者, nil表示接受所有的發送者
通知有點像java的事件管理,只不過統一由通知中心發出通知
[NSNotificationCenter defaultCenter] //預設的發送通知中心
typedef
為資料型別新增一個別名,這是c語言的部分
objectiveC method and C function tansform
objectiveC 的method在編譯時會轉譯成c的function
一個Objective method 如下
-(NSString*) addToString:(NSString *)data
{
return [data stringByAppendingString:@"!"];
}
會被編譯成像這樣的c function
NSString* addToString(id self,SEL _cmd,NSString* data)
{
return [data stringByAppendingString:@"!"];
}
self表示要執行此function的實體,因此在Objective不需要打,因為就是self
_cmd 用執行的function,對self而言就是method
data則是要傳給此function的參數
因此,如果要以c語言執行objective的method的化會像這樣
------------------------------------------------------------------------------------
//呼叫StokeFunc func;
typedef float(*StokeFunc) (id,SEL,NSString*,NSDate*);
SEL selector=@selector(valueForStock:onDay:);
StokeFunc myFucn=(StokeFunc) [self methodForSelector:selector];
NSLog(@"Stoke Value:%f",myFucn(self,selector,@"ALU",[NSDate date]));
------------------------------------------------------------------------------------
//另外要實作method
-(float) valueForStock:(NSString *)stock onDay:(NSDate*)day
{
//.......
}
//----------------------------------------------
NSStringFromSelector(SLE selector) //取得SEL指定的方法名稱
method_getName(method) //回傳SEL,methoid (方法的指標),取得SEL格式的指標
method_getImplementation(method) //回IMP
//imp是一個指標具體指向一個method在runtime時的具體實作
[obj performSelector:@selector(newMethod)];
用selector來呼叫method
用c的指標取得ObjectiveC的屬性
object_getInstanceVariable(id,value_name,point)
用上屬函式可以抓將ojbC的屬性存到c指標
void *outValue;
object_getInstanceVariable(rt8, "val", &outValue);
NSLog(@"The number is %d", [(NSNumber*) outValue intValue]);
NSMethodSignature & NSInvocation
一般執行方法會用
[obj performSelector:@selector(method) withObject:arg];
使用這種方法時,無法取得回傳的結果不是(id),如BOOL
或者傳遞參數不為(id),則可用NSInvocation
隱藏statusBar
[UIApplication sharedApplication].statusBarHidden=YES;
參考資料:
掌握iPhone SDK程試開發計巧
沒有留言:
張貼留言