类的声明与实现
1、类必须有声明与实现
2、类名的单词首字母必须大写
3、定义属性名的时候,要用下划线开头(规范)
@interface 类名:NSObject
{
类的属性(成员变量)
}
类的方法的声明
@end
@implementation 类名
类的方法
@end
类的创建
类名 *变量名 = [类名 new]
类在第一次被访问的时候,会进行类加载,将类的代码存储在代码段中,之后再被访问的话不会再进行类加载。
我们创建的对象实际上是一个类指针,类指针存储在栈中,指向堆中所创建的类的空间,其中存储着类的成员变量,每一个对象都有一个isa的成员变量,指向在代码段中的类的代码。
定义类的位置
若类与执行的位置在同一个文件中,类要定义在前
若定义在不同的文件中,使用#import “文件名”
但大部分情况下,类都是要单独定义在其他文件的。
oc的文件分为.m 与.h
.h一般用来存放类的声明部分
.m一般用来存放类的实现部分
可以直接通过新建文件 cocoa Class直接同时创建.h 与.m文件
类方法的声明
1)对象方法的声明:
- (返回值类型)方法名:
对象方法要通过创建对象,通过对象名来调用
2)类方法的声明:
+ (返回值类型)方法名:
类方法直接使用类名来调用
注意:
1.在类方法中,不能直接使用成员变量
成员对象是在对象创建的时候,与对象一起创建,此时还没有成员变量
2.在类方法中不能直接调用当前类的其他方法
3.对象方法中可以直接调用类方法
4.self是一个指针,可以在对象方法与类方法中使用。self在对象方法中指向当前对象,在类方法中指向当前类
类的成员变量与方法的使用
@interface Person:NSObject
{
@public
NSString *_name;
int _age;
int _weight;
}
//对象方法的声明
- (void)eat:(int)num;
- (void)run:(int)num;
//类方法的声明:创建Person的构造器
+ (instancetype)Person:(NSString*)name :(int)age :(int)weight;
@end
@implementation Person
//对象方法的实现
- (void)eat:(int)num{
_weight = _weight + num;
}
- (void)run:(int)num{
_weight = _weight - num;
}
//类方法的实现:创建Person的构造器
+ (instancetype)Person:(NSString*)name :(int)age :(int)weight
{
Person *p = [Person new];
p->_name = name;
p->_age = age;
p->_weight = weight;
return p;
}
@end
int main(int argc, const char * argv[]) {
Person *lll = [Person new];
lll->_name = @"啦啦啦";
lll->_age = 18;
lll->_weight = 100;
NSLog(@"%d",lll->_weight);
[lll eat:100];
[lll run:50];
NSLog(@"%d",lll->_weight);
Person *hhh = [Person Person:@"哈哈哈" :22 :150];//使用类方法创建对象
NSLog(@"%@",hhh->_name);
return 0;
}
``