前言
自己一直从事android的开发,最近终于开始了ios的学习生涯,现在开发ios的语言有objective-c和swift,所以对于我这样的初学者久产生了纠结,到底是应该学习哪个语言?
关于这个问题也请教了一些大牛,最后自己决定学习objective-c(简称oc),理由是:swift现在国内的使用率还比较低,使用率低就会导致遇到问题寻找路径要少。
因此计划记录下自己的学习路程,这样既能加深对知识的理解,同时与初学者共勉,在文章中我会尝试把objective-c与java进行对比,对比了才会对知识有更深刻理解。
本节内容
oc中的类,对象,方法。
关于类,对象的一些基础的面向对象的概念此处就不多讲了。
类
我们先从用java和oc分别定义一个相同类的角度来看下他们之间的不同。
java中类的定义:
ClassName.java文件:
public class ClassName extends ParentName{
//属性声明
private int a;
private String str;
//set get方法
public void setA(int a){
this.a = a;
}
public int getA(){
return a;
}
public void setStr(String str){
this.str = str;
}
public String getStr(){
return str;
}
}
oc中类的声明,定义:
ClassName.h文件:类的声明
#import
@interface ClassName : ParentClassName{
//类实例属性声明
int a;
NSString* str;
}
//方法的声明(方法有类方法和类实例方法2种)
- (void) setA: (int) paramA;
- (int) getA;
- (void) setStr: (NSString*) paramStr;
- (NSString*) getStr;
//结束符
@end
ClassName.m文件:类的实现(或类的定义)
#import
#import "ClassName.h"
@implementation ClassName
- (void) setA: (int) paramA{
a = paramA;
}
- (int) getA{
return a;
}
- (void) setStr:(NSString *) paramStr{
[str release];
str = [paramStr copy];
}
- (NSString *) getStr{
return str;
}
//结束符
@end
看了以上的代码,是不是首先第一感觉是java中类的定义相比oc要简单的多,那我们就详细的讲解下。
.h和.m两种文件
oc中类的声明,定义是在2种文件中进行的。
首先说下这2种文件:
- .h文件,又称头文件以 .h 作为后缀。头文件主要进行类的声明,类的声明主要有以下内容:
- 类的名字,类的层级结构(继承的父类,实现的协议(协议是java中的interface))定义
- 声明类包含哪些实例属性
- 方法(类的方法和类的实例方法)进行声明,只是声明,不包含方法的实现
- .m文件,可以称为实现文件,主要是对.h文件中类声明的方法进行实现
java中的源文件类型就只有.java一种。
类的声明,定义
oc中:
类声明开始命令 类的名字 继承符号 父类的名字
@interface ClassName : ParentName{
类的实例属性定义处.....
}
方法声明处......
//结束命令
@end
类的定义开始命令 类的名字
@implementation ClassName
方法实现处......
//结束命令
@end
类的声明放在.h文件中,文件名最好是定义的类的名字,类的声明以 @interface命令开始 ,以 @end命令结束," ClassName"是类的名字, “ :”是继承符号 类似于java中的“ extends” , “ParentName”是父类的名字。一对“{}”定义了类的实例属性, 类的方法声明是放在“{}”后面。
类的实现或定义放在.m文件中,文件名最好是定义的类的名字,类的定义以@implementiation命令开始,同样以@end命令结束,处于命令之间的就是方法的实现位置。要想实现一个类,必须通过“#import ”的方式把类的.h文件引入。类声明的名字与类的实现的名字必须相同
java中:
public class ClassName extends ParentName{
类的属性定义.....
类的方法定义.....
}
类的属性
oc中:
属性定义:
基本类型定义(基本类型有int,float等):
基本类型 变量名
int a;
类 类型定义:
类名 * 变量名 (类类型定义要用指针来定义)
NSString * str; (NSString是oc中的字符串类)
java中:
属性定义:
访问权限符 [static final] 类型名 变量名
private int a;
protected String str;
public static final String MAX_NUM = "max_num";
类的方法定义
oc中:
oc中方法声明,定义是分2部分的,方法的声明在类声明(.h文件)时进行,只是对类进行声明,不会涉及到具体实现。方法的定义或实现是在类的定义(一般在.m文件)时进行的。
方法的声明: (-代表类实例方法, +代表类方法)
-/+ (void) methodName : (int) param;
方法类型 返回值 方法名 接收参数 参数类型 参数名字
例子:
- (void) setA: (int) paramA;
+ (int ) a; (没有参数的话就没有":"及后面部分)
方法的实现:
方法类型 返回值 方法名 接收参数 参数类型 参数名字
-/+ (void) methodName : (int) param{
}
"-"代表类实例方法, "+"代表类方法
java中:
void methodName( int param){}
访问权限 返回值 方法名 参数类型 参数名
例子:
public void setA(int a){}
对象
oc中
对象声明初始化:
ClassName * className = [[ClassName alloc] init]
首先说下oc中向一个类或对象发送消息(其实也叫方法调用)方式
[类/对象 方法名:参数]
所以[ClassName alloc] 会向ClassName发送一条分配空间(alloc)的消息,alloc是NSObject中的方法,该消息会返回一个ClassName类型的对象。然后再次向ClassName对象发送一条init消息,来初始化对象的属性,首先会初始化父类中的属性,其次才是子类中的属性, 这个init类似于java中的构造函数,java中构造函数也是先调用父类中的构造函数,初始化父类中的属性,其次在对子类中的属性进行初始化。
总结
关于oc中的类,对象,方法的声明,定义已经完毕,这只是一个很初级的对oc的一个认识,后面还会继续深入学习,继续自己的ios学习历程,同时希望ios大神能指出我文章中的有误之处,因为自己是初学者有很多地方还不深入。
本人微信:704451290