类的深入研究
2017-07-13 10:35
169 查看
1. 在Person.h里面添加两个方法声明+ (void)eat;
和 - (void)run;
#import <Foundation/Foundation.h>
@interface Person : NSObject
+ (void)eat;
- (void)run;
@end
在Person.m里面实现方法
#import "Person.h"
@implementation Person
+ (void)eat{
NSLog(@"好好吃饭");
}
- (void)run{
NSLog(@"跑步锻炼�");
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
Person *p1 = [[Person alloc] init];
//类的本质也是对象,是属于Class类的对象
Class c1 = [p1 class];//调用对象方法得到类对象
Class c2 = [Person class];//调用类方法得到类对象
NSLog(@"\n c1 = %p \n c2 = %p",c1,c2);
//打印结果如下:
// 2017-07-13 09:59:25.136
类的深入研究[65419:799244]
// c1 = 0x100e21ec0
// c2 = 0x100e21ec0
// 地址相同说明是等价的,是同一个类对象
[c1 eat];//利用类对象调用类方法
Person *p2 = [[c1 alloc] init];//利用类对象alloc创建对象
[p2 run];//利用对象调用对象方法
}
2. 在Person.m里面添加方法
当类加载进内存的时候调用,就是说没有创建这个类,只要这个类在工程里面就会加载调用
+(void)load{
NSLog(@"Person------load方法");
}
在代码里面第一次创建类的时候就会调用
+(void)initialize{
NSLog(@"Person------initialize方法");
}
// 在这个里面啥也不写,直接运行,就会调用+(void)load;这个方法
// 打印结果如下:
// 2017-07-13 10:07:28.301 类的深入研究[65443:801957] Person------load方法
Person *p1 = [[Person
alloc] init];
//这个时候只是写这一句代码,直接运行,就会调用+(void)load;和+(void)initialize方法
//打印结果如下:
// 2017-07-13 10:09:36.905 类的深入研究[65462:803189] Person------load方法
// 2017-07-13 10:09:36.953 类的深入研究[65462:803189] Person------initialize方法
//如果Student继承Person类的时候,这个时候在Student.m里面添加连个方法
// +(void)load{
// NSLog(@"Student------load方法");
// }
// +(void)initialize{
// NSLog(@"Student------initialize方法");
// }
Student *s = [[Student
alloc] init];
//打印结果如下:
// 2017-07-13 10:16:58.469 类的深入研究[65498:806112] Person------load方法
// 2017-07-13 10:16:58.470 类的深入研究[65498:806112] Student------load方法
// 2017-07-13 10:16:58.517 类的深入研究[65498:806112] Person------initialize方法
// 2017-07-13 10:16:58.517 类的深入研究[65498:806112] Student------initialize方法
//小伙伴们明白了吧!
和 - (void)run;
#import <Foundation/Foundation.h>
@interface Person : NSObject
+ (void)eat;
- (void)run;
@end
在Person.m里面实现方法
#import "Person.h"
@implementation Person
+ (void)eat{
NSLog(@"好好吃饭");
}
- (void)run{
NSLog(@"跑步锻炼�");
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
Person *p1 = [[Person alloc] init];
//类的本质也是对象,是属于Class类的对象
Class c1 = [p1 class];//调用对象方法得到类对象
Class c2 = [Person class];//调用类方法得到类对象
NSLog(@"\n c1 = %p \n c2 = %p",c1,c2);
//打印结果如下:
// 2017-07-13 09:59:25.136
类的深入研究[65419:799244]
// c1 = 0x100e21ec0
// c2 = 0x100e21ec0
// 地址相同说明是等价的,是同一个类对象
[c1 eat];//利用类对象调用类方法
Person *p2 = [[c1 alloc] init];//利用类对象alloc创建对象
[p2 run];//利用对象调用对象方法
}
2. 在Person.m里面添加方法
当类加载进内存的时候调用,就是说没有创建这个类,只要这个类在工程里面就会加载调用
+(void)load{
NSLog(@"Person------load方法");
}
在代码里面第一次创建类的时候就会调用
+(void)initialize{
NSLog(@"Person------initialize方法");
}
// 在这个里面啥也不写,直接运行,就会调用+(void)load;这个方法
// 打印结果如下:
// 2017-07-13 10:07:28.301 类的深入研究[65443:801957] Person------load方法
Person *p1 = [[Person
alloc] init];
//这个时候只是写这一句代码,直接运行,就会调用+(void)load;和+(void)initialize方法
//打印结果如下:
// 2017-07-13 10:09:36.905 类的深入研究[65462:803189] Person------load方法
// 2017-07-13 10:09:36.953 类的深入研究[65462:803189] Person------initialize方法
//如果Student继承Person类的时候,这个时候在Student.m里面添加连个方法
// +(void)load{
// NSLog(@"Student------load方法");
// }
// +(void)initialize{
// NSLog(@"Student------initialize方法");
// }
Student *s = [[Student
alloc] init];
//打印结果如下:
// 2017-07-13 10:16:58.469 类的深入研究[65498:806112] Person------load方法
// 2017-07-13 10:16:58.470 类的深入研究[65498:806112] Student------load方法
// 2017-07-13 10:16:58.517 类的深入研究[65498:806112] Person------initialize方法
// 2017-07-13 10:16:58.517 类的深入研究[65498:806112] Student------initialize方法
//小伙伴们明白了吧!
相关文章推荐
- C/C++中指针和引用之相关问题深入研究
- 对 Python 迭代的深入研究
- CSS float浮动的深入研究、详解及拓展(二)
- 深入研究vs 2008中的javascript编辑调试器
- 深入研究Servlet线程安全性问题
- CSS深入研究:Position详解[转]
- 深入研究java.lang.Runtime类【转】
- [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2
- 设计模式系列之Factory深入研究
- 推荐android几本研究深入的书籍(对开发人员很有帮助)
- BW数据源深入研究【转自WKingChen的博客】
- 深入研究Asp.net页面的生命周期
- JSP的相对路径深入研究!
- java 容器深入研究之使用Abstract类定制
- 异常的深入研究与分析(1)
- .NET 深入研究 接口与值类型
- 剖析 ADO.NET 批处理更新(深入研究数据访问)
- Spring 3 MVC深入研究
- VS.NET安装部署深入研究
- 深入研究B树索引(一)