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/01/28

[Objective-C] 物件化的世界 - class & object


idea...



我是iOS工程師,煩! 這麼多的iPad的資訊散落在程式中,好難管啊! 若1台iPad有3個資訊,10台iPad不就要用30個變數來存放iPad資訊了!!!
我是類別class,
我可以幫你定義什麼是iPad,
並將資訊定義於其中。

我是物件Object,
我依照類別class的定義產生出一台台iPad,
如此你就可以透過我表示每一台iPad,
當然,iPad相關的資訊也會包含在其中。





1. 建立iPad類別
  • 新增Objective-C class檔案,取名為iPad,以透過class描述什麼是iPad


  • 建立後會產生iPad.h與iPad.m兩個檔案



2. 宣告iPad實體變數
  • 在iPad.h檔中,會以@interface與@end來表示類別的開始與結束,而@interface後方即是類別的名字iPad
  • 於@interface與@end之間加上大括號,分別宣告UDID(裝置識別碼)、Type(機型)、Capacity(容量)等3個iPad資訊
  • 加上@public,開放實體變數的存取權限
#import <Foundation/Foundation.h> @interface iPad : NSObject { @public NSString * UDID; NSString * Type; NSInteger Capacity; } @end


3. 建立iPad物件,以表示一台台的iPad
  • 透過#import "iPad.h"引用iPad類別
  • 透過alloc與init方法分別建立3台iPad類別,如下範例,如此就可以以物件的方式管理iPad資訊了
#import <Foundation/Foundation.h> #import "iPad.h" int main(int argc, const char * argv[]) { @autoreleasepool { iPad * pad1 = [[iPad alloc] init]; pad1->UDID = @"abc123-111-111-111"; pad1->Type = @"iPad"; pad1->Capacity = 16; iPad * pad2 = [[iPad alloc] init]; pad2->UDID = @"abc456-222-222-222"; pad2->Type = @"iPad 2"; pad2->Capacity = 16; iPad * pad3 = [[iPad alloc] init]; pad3->UDID = @"abc789-333-333-333"; pad3->Type = @"iPad Air"; pad3->Capacity = 16; } return 0; }



檔案連結:objective_c_class_object.zip


實體變數的存取權限:
@package => 同一個套件可存取
@private => 僅限於此物件本身可存取,即為類別中撰寫程式時使用,此為預設的存取權限
@protected => 僅限於此物件本身與繼承的物件可存取,即為類別或繼承的類別撰寫程式時使用
@public => 完全開放權限

為何類別是@interface,而不是@class?
在Objective-C中,確實是使用@interface作為類別宣告的關鍵字,可能因.h與.m檔的分離概念有關,.h純粹只是定義,因此使用interface的字眼表示類別功能的定義