變數容器在low了,一次只能存放一個裝置,但我身上有iPhone、iPad2、iPad mini這麼多裝置,不能一次保存所有裝置嗎? |
我是NSArray陣列, 沒問題,我可以幫你這個忙, 一次幫你保管多個裝置。 |
1. 建立iPad、iPadmini與iPhone
- 建立iPad、iPadmini與iPhone類別
iPad.h
#import <Foundation/Foundation.h>
@interface iPad : NSObject
-(void) connectInternetWithWifi;
@end
iPadmini.h
#import <Foundation/Foundation.h>
#import "iPad.h"
@interface iPadmini : NSObject
-(void) connectInternetWithWifi;
@end
iPhone.h
#import <Foundation/Foundation.h>
@interface iPhone : NSObject
-(void) connectInternetWithWifi;
@end
2. 建立NSArray,並存入iPad、iPadmini與iPhone
- 建立NSArray,並透過initWithObjects:存入iPad、iPadmini與iPhone
- 存入時,最後需代入nil表示結束
#import <Foundation/Foundation.h>
#import "iPad.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//建立3台裝置
iPad * pad1 = [[iPad alloc]init];
iPadmini * pad2 = [[iPadmini alloc]init];
iPhone * phone1 = [[iPhone alloc]init];
//透過Array將3台裝置保留在同一個Array中,
//initWithObjects後方的參數即以逗號隔開要代入的裝置,
//最後以nil表示結束
NSArray * deviceArray = [[NSArray alloc] initWithObjects:pad1, pad2, phone1 , nil];
}
return 0;
}
3. count取得數量、objectAtIndex取出裝置
- NSArray可透過count訊息得知其中存放物件的數量
- 在透過objectAtIndex:訊息取得對應的裝置物件
- 因NSArray皆以id型別的方式保存物件,因此透過objectAtIndex:訊息取得的也是id型別的物件
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPadmini.h"
#import "iPhone.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//建立3台裝置
iPad * pad1 = [[iPad alloc]init];
iPadmini * pad2 = [[iPadmini alloc]init];
iPhone * phone1 = [[iPhone alloc]init];
//透過Array將3台裝置保留在同一個Array中,
//initWithObjects後方的參數即以逗號隔開要代入的裝置,
//最後以nil表示結束
NSArray * deviceArray = [[NSArray alloc] initWithObjects:pad1, pad2, phone1 , nil];
//透過conut訊息取得array中裝置的數量,
//當然,可以搭配for迴圈,
//以進行後續依序取得物件的作業
for(int i=0; i<[deviceArray count]; i++)
{
//透過objectAtIndex訊息取得對應位置的裝置物件,
//特別的是,取出的物件皆會以id型別來處理,
//這也是為何NSArray可以保留任何物件的原因,
//因為NSArray皆以id型別來保存物件,
//當然取出後也會是id型別的物件。
id device = [deviceArray objectAtIndex:i];
//還好objective-c是動態型別的語言,
//您可以直接傳送訊息叫裝置連網,
//即便目前它是被視為id型別來看待
[device connectInternetWithWifi];
}
}
return 0;
}
檔案連結:objective_c_nsarray.zip
更多的NSArray使用方式:
NSMutableArray動態變更存放的物件:- NSArray在透過initWithObjects:存入物件後即不可變更其中的內容
- 而NSMutableArray則可動態變數其中的物件,透過addObject:與removeObjectAtIndex:訊息動態的增減保存的物件
#import <Foundation/Foundation.h>
#import "iPad.h"
#import "iPadmini.h"
#import "iPhone.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//建立3台裝置
iPad * pad1 = [[iPad alloc]init];
iPadmini * pad2 = [[iPadmini alloc]init];
iPhone * phone1 = [[iPhone alloc]init];
//先存入一台至NSMutableArray
NSMutableArray * deviceMutableArray = [[NSMutableArray alloc] initWithObjects:pad1 , nil];
//動態透過addObject:訊息存入另2台裝置
[deviceMutableArray addObject:pad2];
[deviceMutableArray addObject:phone1];
//透過removeObjectAtIndex:訊息移除第0個位置的裝置物件
[deviceMutableArray removeObjectAtIndex:0];
}
return 0;
}