fb_license

技術標籤

@selector (1) 初使化區塊 (1) 物件 (1) 物件導向 (2) 型別 (4) 封裝 (1) 流程控制 (1) 陣列 (3) 推論型別 (2) 實機測試 (1) 蓋索林(gasolin) (1) 模組 (1) 憑證 (1) 轉型 (1) 羅康鴻 (121) 類別 (1) 變數 (5) Accelerometer (1) ActiveRecord (1) Activity (1) AFNetworking (1) alloc (1) Android (3) Animation (1) App (1) App ID (1) APP上傳 (1) ASP.NET (1) AVAudioPlayer (1) block (1) C# (2) class (1) CLLocationManager (1) CLLocationManagerDelegate (1) CMMotionManager (4) Controller (1) delegate (1) DELETE語法 (1) Device Motion資料 (1) Dialog (1) DropDownList (1) dynamic language (2) Facebook SDK (9) FBRequest (5) FBRequestConnection (2) FMDB (1) Gesture Recognizers (6) GROUP BY (2) Gyro (1) HAVING (1) IBAction (1) IBOutlet (1) id (3) inheritance (1) init (1) Insert (1) instance variable (1) Interface Builder (1) iOS (70) iOS idea (7) iOS Introduction (1) Layout (1) Magnetometer (1) Menu (2) Method (2) MKMapView (1) MKPointAnnotation (1) MS SQL (5) Nil (1) NSArray (1) NSDictionary (1) NSError (1) NSFileManager & .plist (1) NSMutableArray (1) NSMutableDictionary (1) NSNotificationCenter (1) NULL (1) object (2) Objective-C (16) Objective-C idea (1) ORDER BY (1) Parameter (1) property (1) protocol (2) Provisioning (1) Proximate Sensor (1) Q and A (2) R類別 (1) Rails (9) RESTful SOA (9) Ruby (8) Scene (1) SEELECT (1) Segue (2) SEL (1) SELECT語法 (1) Shake (1) Simulator (1) SOA (8) SQL (6) SQL Server (5) SQL函數 (1) SQL彙總函數 SQL (1) SQLite (1) Storyboard (1) Style (1) Swift (1) Table (1) target & action (1) Theme (1) Toast (1) TRUNCATE TABLE語法 (1) UIActionSheet (1) UIActionSheetDelegate (1) UIActivityIndicatorView (1) UIAlertView (1) UIBarButtonItem (1) UIButton (1) UICollectionView (1) UICollectionViewDataSource (1) UIControl (9) UIDatePicker (1) UIImage (1) UIImagePickerController (2) UIImagePickerControllerDelegate (2) UIImageView (1) UILabel (1) UILongPressGestureRecognizer (1) UINavigationController (2) UIPanGestureRecognizer (1) UIPinchGestureRecognizer (1) UIProgressView (1) UIResponder (1) UIRotationGestureRecognizer (1) UISegmentedControl (1) UISlider (1) UIStepper (1) UISwipeGestureRecognizer (1) UISwitch (1) UITabBarController (1) UITableView (1) UITableViewDataSource (1) UITapGestureRecognizer (1) UITextField (1) UITextFieldDelegate (1) UITextView (2) UITextViewDelegate (1) UIToolBar (1) UIView (8) UIWebView (1) UPDATE語法 (1) var (2) VB.NET (7) View (4) WHERE子句 (1) XML (1)

2014/03/13

[Objective-C] 將東西收在一起 - NSArray & NSMutableArray


idea...



變數容器在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; }

檔案連結:objective_c_nsmutablearray.zip