黑马程序员技术交流社区

标题: OC基础类与对象个人笔记 [打印本页]

作者: muyan091115    时间: 2016-5-24 23:32
标题: OC基础类与对象个人笔记
1,同类型的指针变量之间是可以互相赋值的
    Person *p1 = [Person new];
    Person *p2 = p1;

    代表将p1的值赋值给了p2 而p1的值是对象的地址 所以就把对象的地址赋值给了p2
    所以p1和p2指向了同一个对象
    无论通过p1还是p2区修改对象,修改的都是同一个对象


2,目前为止,只要看到了new 就说明新建了一个对象


1,分组导航标记

    main。h后面有一个导航

    1),#pragma mark  分组名

        就会在导航条对应的位置显示一个标题

    2),#pragma mark -

        就会在导航条对应的位置显示一条水平分割线

    3),#pragma mark -分组名


        就会在导航条对应的位置显示一条水平分割线,在显示


1,我们之前在C中学习的函数,就叫做函数

    void test(){};


2,在OC类中写的方法,就叫做方法

    - (void)sayHi;


3,相同点

    都是用来封装一段代码的,将一段代码封装在其中,表示一个相对独立的功能
    函数和方法只要被调用,那么封装在其中的代码就会被自动执行


4,不同点

    1),语法不同
        函数语法: 返回值类型 函数名(参数列表);
        方法语法: - (返回值类型)函数名 :(参数类型)参数名。。。。。。

    2),位置不同
        OC方法的声明只能写在@interface的大括弧外面,实现只能写在@implementation之中
        函数除了函数内部 和 @interface的大括弧之中 其他的地方都是可以写的
        就算吧函数写在类中,这个函数仍然不属于类 所以创建的类的对象中也没有这个函数
        注意:函数不要写到类中去 虽然这样是可以的 但是这么做是极度地不规范

    3),调用方式不一样
        函数可以直接调用
        方法必须要先创建对象 通过对象来调用

    4),方法有个家 是类 ,函数是没有家的
        方法是属于类的 ,而函数是独立的



1,最容易犯错

    1),@interface时类的声明 @implementation是类的实现,是不能相互嵌套的。

    2),类必要先声明,然后才能去实现。

    3),类必须要声明和实现都有,即使是没有方法的类 也需要有实现。

    4),类的声明必须要放在类的前面 类的实现可以放在类的后面

    5),声明类的时候,类的声明和实现必须要同时存在,
            特殊情况下,可以只有实现,没有声明   但是很不建议你这么做 不规范

    6),属性名一定要以下划线来开头。 这是规范。
            类名 但一个单词的首字母大写

    7),属性不允许声明的时候初始化。

    8),OC方法必须要创建对象通过对象名调用

    9),方法必须既有声明,也要有实现
        a,如果方法只有声明,没有实现 编译器会给警告 不会报错
        b,如果指针指向的对象有方法的声明而没有方法的实现,
             那么通过指针来调用这个这个方法在运行的时候,就会报错。

            unrecognized selestor send to instance )0x100420510

            说明要么对象中没有这个方法,要么有这个方法的声明,但是没有实现。

1,目前为止,所有的类都是写在main。m中

    后果:难以维护,也不利于团队开发。


2,推荐的方式

    把一个类写在一个模块中,而一个模块至少包含两个文件
    。h文件 写类的声明  要引入Foundation 框架的头文件
    。m文件 写类的实现 要引入这个模块的头文件
    建议一个类独占一个模块

    如果要用到类 引入这个类模块的头文件就可以了


3,添加另一个模块的更简捷的方式
    新建一个文件
    选择Cocoa class
    决定类的名称不是文件的名称 而是代码
    但是建议文件名和类名相同


4,当我们要使用这个类的时候 需要先将这个类的头文件引进来 才可以使用

1,对象和方法

    对象作为方法的参数 对象作为方法的返回值


2,类的本质是我们自定义的数据类型 因为对象在内存中的大小是由我们决定的

    什么是数据类型:是在内存中开辟空间的一个模版


3,既然类是一个数据类型,那么类就可以作为方法的参数
    - (void)testWith :(Dog*)dog;

4,语法注意

    1),当对象作为方法的参数的时候,参数应该怎么写
        参数类型是类指针  :(Dog*)dog

    2),调用方法的时候,如果参数是一个对象
        那么给实参的时候,实参要求也必须是一个符合要求的对象。
        如果传入的对象不符合要求 就会出问题

    3),当对象作为方法的参数传递的时候 是地址传递
        所以在方法内部 ,通过形参修改形参指向的对象的时候
        会影响实参变量指向的对象的值。




--------------------------------

1,对象也可以作为方法的返回值

    1),什么时候方法的返回值是一个对象呢
        当方法执行完毕的时候,如果有一个对象方法的内部不知道如何处理
        并且这个对象是调用者需要的 这个时候我们就应该将这个对象返回

    2),如果方法的返回值是一个对象 返回值类型应该写一个类指针








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2