黑马程序员技术交流社区
标题:
点语法 @property 以及id指针
[打印本页]
作者:
沐小妖mavs
时间:
2015-12-3 22:25
标题:
点语法 @property 以及id指针
点语法
1 ,直接用对象的指针名.(去掉get或set)的方法名
2 ,前提:成员变量的get方法,不再需要get,但set方法保持不变.
本质:
!!!点语法本质还是方法调用,去调用类中定义的set get方法(get方法不需要前面+get);
点语法Xcode编译器的一个功能,本质上还是调用方法.
提供一种更方便的方式提供属性
两个要注意的方法
1 不能在set或get方法里用点语法调用自己.否则会出现死循环
2 点语法可以调用普通方法,只要符合规则。但是不要这么做,一般只用来调用属性
属性(成员变量)的作用域
是由权限修饰符控制的
公共的 框架的 受保护的 私有的
public>package>protected> private
@public:代表在任何地方都能通过对象直接访问.对象名->属性名
@protected :只能在本类和子类中直接访问,在外部访问需要定义setger方法去访问
@private:只能在本类直接访问,在子类和外部都不能访问,只能通过setget方法访问
@package:表示只能在框架中访问,权限是介于public与protected之间的
留空表什么都不写:
1,如果上面有属性,则跟随上一个属性
2,如果上面没有别的属性,默认是@protected
注意的问题:
一个类只有实现是可以的,能够创建对象并使用,但只有声明是不行的。且也能定义属性,但属性默认的权限默认修饰符是private。但是一般不要这么做,一个类定义的时候应该声明,实现都要定义.
@property的用法
作用:能够自动生成属性的set与get声明和实现
@property NSString*name(不用+_线,因为编译器在自动创建属性的时候自动生成);
等效于:
1 检测有没有一个NSString*_name;如果没有自动创建:自动生成的属性是private(所以属性在我们由需求的时候,则重写自己加上需要的权限)
2 检测有没有给-name设计与get与set声明,如果没有,按标准形式设置
-(void)setName:(NSString*)name;
-(NSString*)name;
3 检测有没有给_那么的set与get声明做实现,如果没有,则按标准形式自动生成
-(void)setName:(NSString*)name{
_name=name;
}
-(NSString*)name{
return _name;
}
注意:
1 如果手动创建的标准格式set与get方法,则property不会再自动生成
2 如果,属性的set与get方法的实现全部手动按标准格式生成,则这个属性将不会再创建
@synthesize name=_name;
等效于set与get实现;
在4.4之前的Xcode中用于跟property配合使用的,用来生成一个属性的set与get实现
id指针的用法
是一个指针,这个指针的类型是id指针
作用:
可以表示任意的oc对象的指针——万能指针,等效于:NSObject *
注意:
1 ,id不用加*,其力 main已经封装好了.相当于id==NSObject*
2,访问指向类对象的独有方法时,必须要强转
好处:
扩展性很强
如:当一个对象的类型不确定时,或一个指针指向的对象类型有多种时,id可使用
id可以指向任意对象———百变金刚
作者:
Tmac90301
时间:
2015-12-3 22:35
不错的总结,支持一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2