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/09

[Objective-C] 大家都可以是id - dynamic language & id


idea...



有沒有一個容器,可以放入任何東西啊?! 就像我的口袋一樣,不論是任何的行動裝置,甚至是錢,一樣都可以放在我的口袋裡,這樣多好啊!
我是id型別,
沒問題,我就像是一個萬用的口袋,
幫你裝下任何東西。




1. 建立iPad、iPadmini與iPhone
  • 建立iPad、iPadmini與iPhone類別,大致定義如下:
Internet3G.h  #import <Foundation/Foundation.h> @protocol Internet3G <NSObject> //協定中,有個是否3G已連結的屬性 @property bool is3GConnected; //協定中,定義透過3G連結的方法 -(void) connectInternetWith3G; @end
iPad.h
#import <Foundation/Foundation.h> @interface iPad : NSObject -(void) connectInternetWithWifi; @end
iPadmini.h
#import "Internet3G.h" #import <Foundation/Foundation.h> //透過箭號"<>"實作Internet3G協定 @interface iPadmini : iPad <Internet3G> @end
iPhone.h
#import "Internet3G.h" #import <Foundation/Foundation.h> //透過箭號"<>"實作Internet3G協定 @interface iPhone : NSObject <Internet3G> -(void)connectInternetWithWifi; @end



2. id型別的變數,裝下iPad、iPadmini與iPhone
  • id型別的變數可以裝下任何型別的物件,因此不論是iPad、iPadmini或iPhone皆可裝入變數中,所有的物件皆可視為id來對待
#import <Foundation/Foundation.h> #import "iPad.h" #import "iPadmini.h" #import "iPhone.h" int main(int argc, const char * argv[]) { @autoreleasepool { iPad * pad1 = [[iPad alloc] init]; iPadmini * padmini1 = [[iPadmini alloc] init]; iPhone * phone1 = [[iPhone alloc] init]; //不論是什麼, //只要是類別皆可視為id型別的物件, //因此id型別的變數可以裝下任何物件 id device1 = pad1; id device2 = padmini1; id device3 = phone1; } return 0; }


檔案連結:objective_c_id.zip


id是一個指標結構:
  • 為何id的變數不需要搭配星號"*"將變數宣告成指標變數? 因為id即是一個指標結構,因此原本就是一個指標變數,並不需要另外使用星號"*"