一.概述:
前面补充了对象方法、类方法、方法参数~
现在了解一个关键词:Self
二:Self:
Self是一个指针,谁调用了当前方法,self就指向谁
***【出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】***
*** 大家需要记住下面的规则:
1.实例方法里面的self,是对象的首地址。
2.类方法里面的self,是Class.
尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;
在实例方法里面的self,应该被翻译成为object 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 如果你希望成员变量只在本类和本类的子类中使用。
访问修饰符只能用来修饰成员变量,不能用来修饰方法。
补充:
再次强调:(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。