建站之星导出网站,上海高品质网站建设,wordpress编辑器增强代码,wordpress只显示代码OC中类
OC中类的定义
在Xcode中创建一个新的类#xff0c;会自动给你生成两个文件一个是.h另外一个是.m文件,你新创建的类默认继承了NSObject类#xff0c;因为有一些方法都需要基类中的方法。比如alloc分配内存 OC中用来描述类的使用interface 类名#xff1a;父类来进行…OC中类
OC中类的定义
在Xcode中创建一个新的类会自动给你生成两个文件一个是.h另外一个是.m文件,你新创建的类默认继承了NSObject类因为有一些方法都需要基类中的方法。比如alloc分配内存 OC中用来描述类的使用interface 类名父类来进行定义然后用end来定义类的结束
interface NsFirst : NSObject{int _age;int _no;
}
- (void )setAge:(int)age;
-(int)getAge;
-(void) setNo:(int) no;
-(int) getNo;
endOC中类的实现
跟C不同的一点OC中的类的实现并不能和声明放在一起否则编译会报错。而在C中虽然强调要分开写但写到同一个文件中也并不会出错而在OC中就不是这样 OC中新开一个文件用来进行类的实现用implementation 类名开始进行实现用end对实现进行结束标记
implementation NsFirst
-(void )setAge:(int)age{_age age;
}
-(int)getAge{return _age;
}
-(void)setNo:(int)no{_no no;
}
-(int)getNo{return _no;
}
end类的方法
对于每一个类都有静态方法(对于类的方法)和动态方法(对于对象的方法)C中调用静态方法用的是类作用域运算符::去进行调用对于动态方法通过-或者.两个运算法来进行调用 而在OC中调用相应的方法都是通过消息发送,也就是[]这个运算符
//对于上面的类进行相应方法调用
id ns [[NsFirst alloc] init];
[ns setAge:100];
NSLog(age is %i,[ns getAge]);自定义构造方法
一般我们使用的init方法是编译器默认的一种动态方法会给对象初始化为0而有些时候我们需要初始化后进行赋值所以此时就需要重写init方法 重写init方法
自己写的init方法名称不能与系统一样init方法的步骤 先调用基类构造判断是否对象是否创建成功成功后进行赋值操作返回当前对象self
interface Student : NSObject
property int age;
property int no;
//自己写一个构造方法
-(id)initWithAge:(int)age :(int)no;
endimplementation Student
-(id)initWithAge:(int)age :(int)no{//首先调用super的init的方法 //判断是否初始化成功if(self [super init]){//赋值self.age age;self.no no;} //返回return self;
}
end打印对象信息时的description方法
关于多文件编译
OC中可以有多个.h和.m文件但入口函数都是main函数而且OC中没有命名空间所以两个文件中的类名是可能重名的所以我们尽可能命名使类名不能出现重名的情况。
点语法
C中如果定义了对象可以通过对象名.的方式对对象中属性进行操作在OC中也提供了这种类似的方式 OC中的点语法要去使用的话必须要有相应的set方法且set方法设置的属性必须与点语法后的属性名匹配
interface Person : NSObject{int _age;int _no;
}
//-(void)setAge:(int)age:(int)no;
-(void )setAge:(int)age;
-(void )setNo:(int)No;
-(int)getAge;
-(int)getNo;
end#import Person.h
int main(int argc, const char * argv[]) {autoreleasepool {// insert code here...Person* p [[Person alloc] init];p.age 10; //这里就相当于调用setAge方法但注意setAge方法只能对age这一个属性进行操作p.no 20;
// [p setAge:10 :20];int age [p getAge];int no [p getNo];NSLog(age is %i and no is %i,age,no);}return 0;
}propety
在写OC中如果给每个属性都写上get和set方法显得代码太过于冗余可以使用propety来定义成员变量这样编译器就可以自动为我们进行set方法和get方法的声明
propety 声明set和get方法synthesize 实现set和get方法
interface Property : NSObject{int age;int no;float height;
}
property int age;
//-(void) setage:(int)newAge;
//-(int)age;
property int no;
property float height;
endimplementation Propertysynthesize age;
synthesize height;
synthesize no;
end如果在有很多的成员变量例如如下情况
interface Property : NSObject{int age;int age1;int age2;
}那么使用propety默认声明与其同名的成员变量的set和get方法 使用propety声明变量后编译器自动帮助我们声明成员变量我们就不用再手动声明变量。自动生成的变量为私有的. synthesize 实现的成员变量如果没有显示定义则会隐式创建一个与其名称相同的变量若是想要其生成的方法是我显示定义的方法则需指定实现具体的哪个变量
synthesize age _age目前版本中一但使用propety声明了变量编译器会自动帮助我们生成synthesize自动帮我们实现 如果我们觉的编译器帮助我们生成的方法并不符合我们的预期那么我们可以自己实现相应的get方法和set方法编译器就不会再帮我们实现了如果我们只想要get或者set两者中的任意一个的话我们只需要实现其中的任意一个就行另外一个编译器依旧会帮助我们实现