Objective-C之类和对象(3)

一.概述:

            前面补充了对象方法、类方法、方法参数~

      现在了解一个关键词:Self




二:Self:


            Self是一个指针,谁调用了当前方法,self就指向谁


            ***【出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】***


   ***  大家需要记住下面的规则:


    1.实例方法里面的self,是对象的首地址。

    2.类方法里面的self,是Class.

    尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;    

    在实例方法里面的self,应该被翻译成为object self。

    在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。



***


        Self的用途:

        (1)可以利用    "self->成员变量名"  访问当前对象内部的成员变量(仅在对象方法中,类方法不能访问成员变量)

                        

                        



        (2)[self 方法名];可以调用其他的对象方法或者是类方法.(

        1.在类方法中用 self 调用方法,只能调用类方法,要想调用对象方法必须在类方法中实例化一个对象:

       【对象方法 对象方法]


        2.在对象方法中,想用调用类方法,必须【类名 类方法】,不能【self 类方法】;


    3.如果类方法和对象方法重名,假设在对象重名方法中:【self  对象/类方法重名】,会一直调用对象方法,死循环。

)


        (3).如果想要访问父类的成员变量,可以 “self->父类的成员变量”去访问,self会先从子类检查有没有,如果没有,就再去父类找,子类的成员变量和父类的成员变量不能重名!!!!


    

     三再次强调成员变量的内容~

            @private : 私有,被其修饰的属性只能在本类的内部访问。不能被子类直接访问.

            @protected: 受保护的 被其修饰的属性只能在本类以及本类的子类可以直接访问。只能在本类和子类的方法实现中访问。可以通过  self ->  xxxx  或 直接成员名;

           @package: 被其修饰的属性,可以在当前框架中访问。

            @public: 公共的,被其修饰的属性可以在任意地方访问。  通过  对象 -> XXX   可以直接访问!

            

        如果不为属性指定访问修饰符 默认:protected,子类仍然可以继承父类的私有属性。

        就算父类的属性是private,只不过在子类当中无法直接访问从父类继承过来的私有属性,可以通过set get方法来访问。


访问修饰符的作用域:

    从写访问修饰符的地方开始往下,直到遇到另外一个访问修饰符的或者结束大括弧为止,中间的所有的属性都应用这个访问修饰符。



使用建议:
@public 无论什么情况下都不要使用,成员变量不要直接暴漏给外界。


@private 如果成员变量只想在本类中使用,不想再子类中使用。


@protected 如果你希望成员变量只在本类和本类的子类中使用。


访问修饰符只能用来修饰成员变量,不能用来修饰方法


补充:

(1)在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在这里声明的成员变量是@private的。
    在.m中定义的成员变量不能喝它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。

再次强调:(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。

猜你喜欢

转载自blog.csdn.net/null959_/article/details/80959995