本文介绍: 【代码黑马程序员-IOS开发基础班之Objective-C第二天学习笔记

加载

  1. 创建对象时候,肯定是要访问类的
  2. 声明一个类的指针变量也会访问类的
  3. 程序运行期间,当某个类第一次访问到的时候,会将这个类存储内存中的代码段区域,这个过程叫做类加载。只有在类第一次访问的时候,才会做类加载。一旦类被加载代码段以后,直到程序结束的时候才会被释放。

对象内存中究竟是如何存储

//假设以下的代码是写在函数之中的
int main(int arc, const char * argue[]) {
    Person *p1 = [Person new];
    return 0;
}
  1. Person *p1; 会在栈内存申请一块空间,在栈内存声明一个Person类型指针变量p1
                   p1是一个指针变量 只能存储地址
  2.  [Person new]; 真正创建对象的是这段代码
                     new做的事情:1.在堆内存申请一块合适大小空间 
                                2.在这个空间中根据类模版创建一个对象 
                                3.类模版定义什么属性,就把这些属性依次声明对象之中
                                4.额外定义isa属性isa属性一个指针指向对象所属的类在代码段中的地址
                                5.初始化对象的各个属性,给各个属性一个初值。
                                    如果属性类型基本数据类型,那么赋值为0
                                    如果属性类型是C语言指针类型,那么赋值为NULL
                                    如果属性类型是OC语言指针类型,那么赋值nil
                                6.返回对象的地址
  3. 对象中只有属性,没有方法自己类的属性加上一个isa指针指向代码段中的类
    访问对象中的方法:[指针方法名]; 先根据指针名找到对象,对象发现调用方法,在根据对象的isa指针找到类,然后调用类里的方法
  4. 由于每个对象的方法的代码都是一摸一样的,没有必要为每个对象都保存一个方法,这样太浪费存储空间,所以只保持一份

nil与NULL

  1. nil:只能作为指针变量的值,代表这个指针变量不指向内存中的任何空间。等价于0,是一个宏定义,就是0。nil和NULL其实是一样的。 
  2. NULL:只能作为指针变量的值,代表这个指针变量不指向内存中的任何空间。等价于0,是一个宏定义,就是0。
  3. 使用建议:虽然使用NULL的地方可以使用nil,使用nil的地方可以使用NULL,但是不建议大家去使用。C语言指针用NULL,OC语言的类指针用nil
  4. 如果一个类指针的值为nil代表这个指针不指向任何对象。这个时候如果通过这个类指针去访问该类指针指向的对象的属性,会运行报错访问调用对象的方法,运行不会报错,但是方法不会执行

分组导航标记

//在导航对应位置先产生一条水平分割线,再显示标题
#pragma mark - XX类的声明
@interface XX:NSObject {

}

@end

#pragma mark - XX类的实现
@implementation XX

@end

容易出错的点

  1. @interface 和 @implementation 之间不能相互嵌套
  2. 类必须要先声明,后实现。类的声明必须放在使用类前面,类的实现可以放在类的实现后面
  3. 类的声明和实现必须都要有,即使没有方法,也需要有类的实现
  4. 属性名一定要以下划线开头,类名每个单词首字母大写
  5. 属性不允许声明的时候初始化。在为类写一个属性的时候,不允许在声明的时候为属性赋值
  6. OC方法必须要创建对象通过对象名来调用;如果方法只有声明,没有实现编译器会给一个警告,不会报错;如果一个指针指向的对象,有方法的声明,没有方法的实现,那么这个时候通过指针调用这个方法,在运行的时候,就会报错

文件开发

推荐方式:把一个类写在一个模块中,一个模块至少包含两个文件,一个.h头文件,写类的声明 @interface 由于要用到NSObject 所以在头文件引入Foundation框架头文件;一个.m文件,写类的实现 @implementation头文件要引入.h声明文件

如果要用到类,只要引入这个模块头文件可以直接使用了。

原文地址:https://blog.csdn.net/Ls_attack/article/details/127241619

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25424.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注