基础——类分析

 
 
 
 
 
 
1. 应用程序放在硬盘中,启动时以main为入口加载到内存中,内存中有代码区、数据区、堆区、栈区。
@interface Person : NSObject
  {
    int _age;
    NSString *_name;
  }
- (void)eat;
+ (void)run;
@end
Person *p = [Person alloc] init];
备注:
a. alloc :Person 等代码 放在代码区, Person 类通过alloc 在内存中为其分配存储空间 并且产生一个内存地址,这个内存地址是 这个Person的第0个属性,但是这个第0个属性是系统为其默认自动创建的isa指针并且 指向 当前对象所属 类的存储空间,其实类也是一个类对象并且会存放所有的方法, 对象所在的内存存储空间只会存储成员变量,alloc时系统会我们在堆区自动创建类对象,通过isa指针可以找到这个类对象所在的内存地址。
b. init 通过init为当前类的所有属性进行初始化 比如_age初始化为0,_name初始化为@""
c. 创建以后得到一个对象(指针变量),那么如何去修改成员变量(实例变量),当我们通过alloc init 当前的内存存储空间 返回一个 内存地址 用指针去接收这个地址 *p, 这个指针的作用是 通过指针可以访问当前对象所在的存储空间然后找到对应的成员变量进行更改值。
d. 类方法和实例方法执行,实例方法是当前对象(指针变量)找到所在的存储空间然后通过isa指针找到所属类的类对象然后去找到这个类对象里面的eat方法然后去执行; 类方法 通过Person类调用,当系统看到是类方法时会直接通过Person找到类对象然后查找这个run方法,并且进行执行。因此:类方法对于实例方法来说比较高效率!

e. 成员变量: 存放在堆中,不会被释放,只能我们自己进行手动释放
局部变量: 存放在栈中,作用域: 从定义的这一行开始到遇见}或者return结束然后系统会对其进行释放。
全局变量: 存放在静态区,程序启动就会放到存储空间,作用域: 从定义的这一行开始一直到文件的末尾,直到程序结束系统对其释放。

 

原文地址:https://www.cnblogs.com/gui-zi/p/6181654.html