一、Objective-C基礎語法
-
1、字符串
Objective-C的字符串由雙引號包裹,並在引號前加一個@符號title = @"Hello World"; if(title == @"hello World") {}
-
2、函數調用
- 不帶參數
justRun();
- 帶參數
NSLog(@"show string: %@", str); CGRectMake(0, 0, 0, 0);
- 不帶參數
-
3、傳遞消息 給類/實例方法(向對象發送信息)
- 不帶參數
[obj method];
對應的java版本
java obj.method();
- 帶一個參數:
[car fly:1];
對應的java版本
car fly(1);
-
帶多個參數
非第一個參數要有類似鍵值對錶示參數Blue:(float)blue
,即方法名是拼接起來的- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue {...} //定義方法 [myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; //調用方法
對應的java版本
public void setColorToRedGreenBlue(float red, float green, float blue) {...} myObj.setColorToRedGreenBlue(1.0, 0.8, 0.2);
- 不帶參數
-
4、函數鏈式調用
UINavigationBar *bar = [[[UINavigationBar alloc] init] autorelease];
對應的Java代碼
java UINavigationBar bar = UINavigationBar.alloc().init().autorelease();
- 5、創建對象
創建對象需通過alloc以及init兩個消息。alloc的作用是分配內存,init則是初始化對象
objectivec MyObject * my = [[MyObject alloc] init];
在Objective-C 2.0裏,若創建對象不需要參數,則可直接使用new
objectivec MyObject * my = [MyObject new];
若要自己定義初始化的過程,可以重寫init方法,來添加額外的工作。(用途類似C++ 的構造函數constructor)
objectivec - (id) init { if ( self=[super init] ) { // 必須調用父類的init // do something here ... } return self; }
- 6、id動態類型
id 是一種通用的對象類型,它可以指向屬於任何類的對象
objectivec id obj = [Person new];
二、類
Objective-C的類分爲接口定義和實現兩個部分, 接口和實現以@interface、@implementation開頭,都以@end結束。“@”符號在Objective-C中是個很神奇的符號。
- 1、接口定義
接口定義(Interface)放在頭文件中,文件擴展名是.h
Objective-C的Interface更像是java中的Class類
Objective-C的Protocol纔像是java中的Interface接口
Objective-C的自定義一個Interface示例
@interface MyObject {
int memberVar1;
id memberVar2;
}
-(void) instance_method1;
-(BOOL) instance_method2: (int) p1;
-(UITableViewCell *) instance_method3: (int) p1 andPar: (int) p2;
@end
- 2、接口實現(implementation)
放在實現文件中,文件擴展名是.m
```objectivec
@implementation MyObject {
int memberVar3;
}
-(void) instance_method1 {
....
}
-(BOOL) instance_method2: (int) p1 {
....
}
-(UITableViewCell *) instance_method3: (int) p1 andPar: (int) p2 {
....
}
@end
```
上述代碼對應的Java版
```Java
public class MyObject {
protected int memberVar1;
protected OtherClass memberVar2;
private int memberVar3;
public void instance_method1() {
....
}
public boolean instance_method2(int p1) {
....
}
public UITableViewCell instance_method3andPar(int p1, int p2) {
....
}
}
```
-
3、類的靜態方法、實例方法
靜態方法:類方法有一個加號前綴
實例方法:實例方法有一個減號前綴類定義
@interface MyObject : NSObject +(void) sayHello; -(void) sayHello2; @end @implementation MyObject +(void) sayHello { NSLog(@"Hello, World"); } -(void) sayHello2 { NSLog(@"Hello, World2"); } @end
調用
[MyClass sayHello]; MyObject *mycls = [MyObject new]; [mycls sayHello2];
-
4、類的繼承
@interface MyObject : NSObject @end
對應的java代碼
public class MyObject extends NSObject { }
三、協議(Protocol)
相當於Java的Interface接口
-
1、協議的定義
@protocol Locking -(void)lock:(NSString)str; @end
對應的Java代碼
publilc interface Locking { public void lock(String str); }
-
2、協議的繼承
協議本身也可以繼承別的協議
@protocol Locking <NSObject> -(void)lock:(NSString)str; @end
對應的Java代碼
public interface Locking extends NSObject { public void lock (String str); }
-
3、可選方法
協議可以包含可選方法,顧名思義,可選方法可以不被類實現,加了@optional關鍵字,一個類在implements這個協議時,便可以不實現print:方法
objectivec @protocol Locking @optional -(void)lock:(NSString)str; @end
- 4、協議的實現
一個類實現某些協議是寫在Interface定義裏面的, 多個協議名用逗號隔開
```objectivec
@interface MyLockingController : NSObject <Locking, Drawable>
@end
```
對應的Java代碼
public class MyLockingController extends NSObject implements Locking, Drawable {
}