IOS學習筆記 (2) – iPhone手機開發技術文章 iPhone軟體開發教學課程

使用協議委托任務

協議是一個聲明某些方法及屬性並儲存在實體文檔。

協議就像是一些規范,實踐協議的類必須遵守這些規范。

創建協議   xcode–>File –>New –> New File  –> Cocoa Touch –> Objective – C Protocol  –>Next –>協議名稱(eg:PersonProtocol)–>Save

實際聲明協議:

#import<Foundation/Foundation.h>

@protocol PersonProtocol<NSObject>

@optional

@property(nonamotic,strong)NSString *firstName;

@property(nonamotic,strong)NSString *lastName;

@required    //必須實現的方法和屬性

@property(nonamotic,unsafe_unretatined)NSUInteger arg;

-(void)breathe;

@end

創建一個Father類,實現協議

#import<Foundation/Foundation.h>

#import "PersonProtocol.h"

@interface Father:NSObject<PersonProtocol>

-(void)breathe;

@end //.m裡面要有實例方法。

協議裡的關鍵字  @required 明確指定必須的屬性與方法。

@optional 可以實踐或不需要實踐使用

監測實例方法或類方法是否有效

使用環境:你開發的SDK是最新版的,但是你希望支持執行舊版IOS SDK的裝置。

使用 NSObject 的 instancesRespondToSelector:類方法檢測指定的 selector 是否存在類實例中。要確認一個類 是否響應本身的類方法,需使用 respondsToSelector:類方法。你可以使用同樣方式檢測,在一個實例的實例方 法,透過 instancesRespondToSelector:NSObject 的類方法

 

這邊有兩個關於 iOS SDK 的重要概念要記住:

Base SDK(基底 SDK)

這個 SDK 是用來編譯應用程序。可能是最新最大的 SDK,且能存取所有新的 API。

Deployment SDK/Target(部署 SDK)

這邊的 SDK 使指定你希望編譯後並執行的裝置 SDK 版本。

因為就事實上,編譯應用是基於 Base SDK 與 Depolyment SDK 兩個 SDK 編譯。

 

舉個例子:

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"Item 1",

@"Item 4",

@"Item 2",

 

@"Item 5",

@"Item 3", nil];

NSLog(@"Array = %@", array);

if ([NSArray instancesRespondToSelector:@selector(sortUsingComparator:)]){

 

 

/* 使用 sortUsingComparator: 實例方法來排列數組*/ }

else if ([NSArray instancesRespondToSelector: @selector(sortUsingFunction:context:)]){

 

/* 使用 sortUsingFunction:context: 實體方法做數組排序*/ }

else {

/* 處理其他狀況 */

 

}

 

確認類是否可在運行期中使用

使用環境:你正在使用最新版的 SDK,但是你無法確定是否可以使用,因為無法肯定用戶是否有安裝最新版的 SDK。

 

使用字符串

使用NSString 和NSMutableString 類

NSString 類不能更改的,NSString類一旦被創建,內容就不能修改瞭。可變字符串NSMutableString創建以後還可以修改。

NSString *string = @"hello world";

NSString *string = [NSString stringWithString:@"hello world"];

NSMutableString同上

字符串長度   [string  length];

字符串類型轉換:

NSString *string = @"123.456";

NSInteger integerOfString = [string integerValue];    //123

CGFloat  floatOfString = [string floatValue];    //123.456001

Double doubleOfString = [string doubleValue];    //123.456.000

字符串中查找字符串

NSString *one = @"hello world";

NSString *two = @"hello";

NSRange range = [one rangeOfString:two];

if(range.location == NSNotFound){

    /*Coule NOT find nedle in haystack*/

}else{

    NSLog(@"%@",range.location);

}

數字

NSNumber 類用來面向對象的方法處理數字。

NSInteger 有符號數(正數或負數) NSUInteger無符號數(正數和0)

CGFloat 和 double 操作浮點數。

numberWithInteger:將一個整型值封裝成一個NSNumber實例

numberWithUnsignedInteger:講一個無符號整型值封裝成一個NSNumber實例

numberWithFloat:將一個浮點數封裝成一個NSNumber實例

numberWithDouble:將一個double類型的數封裝成一個NSNumber實例

下面這些方法用來從一個NSNumber實例中提取純數字:

integerValue/unsignedIntegerValue/floatValue/doubleValue

數字和一個字符串比較方法:

NSNumber *unsighedNumber = [NSNumber numberWithUnsignedInteger:123456];

NSString *numberInString = [NSString stringWithFormat:@"%lu",(unsigned long)[unsignedNumber unsignedIntegerValue]];

NSLog(@"%@",numberInString);

 

分配和使用數組:

NSArray 和 NSMutableArray 類

NSArray *array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",nil];

自動釋放的數組:

NSArray*array = [NSArray arrayWithObjects: @"one",@"two",@"three",nil];

數組長度   [array count];

nsmutableArray

數組增加對象[array addObject:@"four"];

刪除數組[array removeObject:@"four"];

獲取數組指定位置的對象

objectAtIndex:

分配和使用 Dictionary

分配和使用Sets

Sets和array非常相似,二者最大的區別就是sets中相同對象隻能被添加一次。當你第二次添加同一個對象時,sets會拒絕添加。

addObject 增加對象  removeObject 刪除對象

快速遍歷一個set中所有的對象 enumerateObjectsUsingBlock:方法。例如

[setOfNames enumerateObjectsUsingBlock:^(__strong id obj,BOOL *stop){

    if([obj isKindOfClass:[NSString class]]){

        NSString *string = (NSString *)obj;

        if([string isEqualToString:@"Kiyosaki"){

            NSLog(@"Found %@ in the set",string);

            *stop = YES;

     }

  }

}

 

通過NSNotificationCenter發送通知

通過App發佈一條通知同時允許其他對象接收通知並采取行動,這取決於你發佈的通知。

使用NSNotificationCenter中default notificationcenter的postNotificationName:object:userInfo:的實例方法發佈一條通知,其中攜帶一個對象(通常此對象激活通知)和一條用戶信息詞典,詞典中包含瞭關於詞條通知或者激活通知的對象的額外信息。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *