ios开发(1) —— Objective-C入门教程(和java对比)

《一》、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 {
}

维基上的objectivec参考链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章