《一》、Objective-C基础语法
一、字符串
Objective-C的字符串由双引号包裹,并在引号前加一个@
符号
title = @"Hello World";
if(title == @"hello World") {}
全局常量
1、Java代码
使用static final
修饰符
static final AAA_BBB = 1;
2、oc
#define AAA_BBB @"Hello"
二、函数的对比
1、Java代码
public void helloWorld(bool ishelloworld) {
// do something
}
2、oc
-(void) helloWorld:(BOOL)ishelloworld{
// do something
}
三、调用类的实例方法
1、Java代码
car.fly(1);
// 带多个参数
public void setColorToRedGreenBlue(float red, float green, float blue) {...}
myObj.setColorToRedGreenBlue(1.0, 0.8, 0.2);
2、oc
// 不带参数
[obj method];
// 带一个参数:
[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]; //调用方法
四、函数链式调用
1、Java代码
UINavigationBar bar = new UINavigationBar().autorelease();
2、oc
UINavigationBar *bar = [[[UINavigationBar alloc] init] autorelease];
五、创建对象
1、java
java中创建一个对象实例new 类构造方法()
MyObject mMyObject = new MyObject()
2、oc
-
a、创建对象需通过alloc以及init两个消息。alloc的作用是分配内存,init则是初始化对象
MyObject * my = [[MyObject alloc] init];
-
b、在Objective-C 2.0里,若创建对象不需要参数,则可直接使用new
MyObject * my = [MyObject new];
-
c、若要自己定义初始化的过程,可以重写init方法,来添加额外的工作。(用途类似C++ 的构造函数constructor)
- (id) init { self = [super init]; // 必须调用父类的init if (self) { // do something here ... } return self; }
六、id动态类型
id 是一种通用的对象类型,它可以指向属于任何类的对象
id obj = [Person new];
《二》、类
Objective-C的类分为接口定义和实现两个部分, 接口和实现以@interface
、@implementation
开头,都以@end
结束
一、接口定义
接口定义(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
二、接口实现(implementation)
放在实现文件中,文件扩展名是.m
@implementation MyObject {
int memberVar3;
}
-(void) instance_method1 {
....
}
-(BOOL) instance_method2: (int) p1 {
....
}
-(UITableViewCell *) instance_method3: (int) p1 andPar: (int) p2 {
....
}
@end
上述代码对应的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) {
....
}
}
三、类的静态方法、实例方法
静态方法:类方法有一个+加号前缀
实例方法:实例方法有一个-减号前缀
1、类定义
@interface MyObject : NSObject
+(void) sayHello;
-(void) sayHello2;
@end
@implementation MyObject
+(void) sayHello {
NSLog(@"Hello, World");
}
-(void) sayHello2 {
NSLog(@"Hello, World2");
}
@end
2、调用
[MyClass sayHello];
MyObject *mycls = [MyObject new];
[mycls sayHello2];
四、类的继承
@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:方法
@protocol Locking
@optional
-(void)lock:(NSString)str;
@end
4、delegate协议的实现
一个类实现某些协议是写在Interface定义里面的, 多个协议名用逗号隔开
@interface MyLockingController : NSObject <Locking, Drawable>
@end
对应的Java代码
public class MyLockingController extends NSObject implements Locking, Drawable {
}