OC 对象的内存存储细节(类方法及对象方法的调用细节)
来源:互联网 发布:shadow web 黑暗网络 编辑:程序博客网 时间:2024/04/30 21:36
//
// main.m
// 第二个OC类
#import <Foundation/Foundation.h>
/*
定义一个类:person
属性:age heifht weight
行为:eat sleep walk
*/
@interface Person : NSObject
{
//属性
@public
int _age;
double _height;
double _weight;
}
//行为
-(void)eat:(char *)food;
-(void)sleep;
+(void)walk;
@end
@implementation Person
-(void)eat:(char *)food{
NSLog(@"吃%s",food);
}
-(void)sleep{
NSLog(@"开始睡觉");
}
+(void)walk{
NSLog(@"开始散步");
}
@end
int main(int argc,constchar * argv[]) {
//创建对象
/*
在堆中开辟存储空间,初始化属性
在栈中返回指针地址,这个地址其实就是类的第0个属性的地址,但类的第0个属性,并不是_age,而是isa,是系统自动生成的
isa属性其实就是存储的指针,占8字节
其实类也是一个对象,也就意味person也是一个对象
平时我们所说的创建对象就是通过一个类对象来创建一个新的实例对象
类对象是系统自动帮我们创建的,里面包含了当前对象的所有方法
而实例对象是程序自己手动通过new来创建的,而实例对象的第0个属性isa就是指向创建它的类对象
类的方法在内存中只有一份存储空间,所有的对象公用类的方法
*/
Person *p = [Personnew];
//将堆中的存储空间里面的初始化的属性值修改
p->_age = 30;
p->_height = 172.5;
p->_weight = 85.5;
NSLog(@"p = %p",p);
NSLog(@"age = %p",&(p->_age));
/*
调用对象方法的步骤:根据p指针找到实例对象在堆中的存储空间,通过实例对象找到isa指针,通过isa指针
找到类对象的存储空间,然后找到sleep方法,调用sleep方法输出信息
*/
[p sleep];
/*
调用类方法的步骤:直接内存中找类对象,并找到类对象的方法执行,所以类方法的执行效率比对象方法的执行效率高
*/
[Personwalk];
/*
当第二次调用new方法的时候,会重复上面的步骤,
此时在堆内存中存在两个实例变量,栈内存中存在两个指向实例对象的指针
如果修改p2的属性,不会对p的属性有影响
总结:一个类可以创建多个对象
*/
Person *p2 = [Personnew];
return 0;
}
- OC 对象的内存存储细节(类方法及对象方法的调用细节)
- 类对象的存储细节
- 对象的存储细节
- OC学习对象的存储细节,isa指针
- 黑马程序员------OC中对象的存储细节
- 54,对象的存储细节
- OC 类的存储细节
- OC-1-对象的存储细节、#progma mark指令、NSString类
- OC学习旅程(二)类和对象的存储细节、#paragma mark 和 新建类时的常见错误
- 黑马程序员-OC-类方法和对象方法的调用
- 黑马程序员--对象的存储细节
- 对象的方法及调用
- 对象模型的细节
- 对象模型的细节
- Java 对象内存细节
- Servlet的细节、ServletConfig对象、ServletContext对象及ServletContext应用
- ArrayList中去重方法及注意的细节
- OC 类方法 对象方法 对象成员之间的关系
- Java 静态与非静态方法的区别
- [BZOJ3626][LNOI2014]LCA(离线+链剖)
- xcode 低版本 要运行 iOS高的系统 真机测试
- C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求
- 贝叶斯方法(Bayesian approach) —— 一种概率解释(probabilistic interpretation)
- OC 对象的内存存储细节(类方法及对象方法的调用细节)
- RTP协议分析
- Nginx配置文件nginx.conf详解
- spring代理对象的生成及运行机制源码解读
- 汉诺塔问题
- linux中进程的管理
- 开发问题总结
- jq鼠标移入移出元素呈现淡入淡出效果总结
- 电池容量工作时间如何计算