您的位置:首页 > 移动开发 > Objective-C

黑马程序员——Objective-C之特殊语法总结

2015-09-07 15:37 405 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

38.@property

Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略

①基本概念

@property告诉编译器声明属性的访问起(getter/setter)方法,这样的好处是:免去我们手工书写get和set方法繁琐的代码。

②用法:

@property 类型名 方法名

@property int age;

/*相当于进行了age的set和get的方法声明;

-(void)setAge:(int)age;

-(int)age;

*/

39.@synthesize

①基本概念

@synthesize时在.m文件中定义set和get方法的实现。

②使用:

@property int age;

@synthesize age; //表示生成.h中变量age的get和set方法

40.动态类型&静态类型

多态:允许不同的类定义相同的方法。

动态类型:程序直到执行时才能确定所属的类。

静态类型:将一个变量定义为特定类的对象时,使用的是静态形态。

41.用NSObject访问子类对象方法

NSObject是所有类的基类,obj可以指向所有子类。

//定义id类型

NSObject *obj = [Person new];

[(Person*)obj test];

42.id类型

id是一种通用的对象类型,它可以用来存储属于任何类的对象,也可以理解为万能指针。

NSObjcet和id都可以指向任何对象,NSObject对象会进行编译时检查(需要强制类型转换),id不需要强制类型转换,id可以直接用。

编译器看到id以后,认为是动态类型,不在检查类型。

43.动态类型检测

对象在运行时获取其类型的能力成为内省。内省可以有多种方法实现。

①判断类型

1)-(BOOL)isKindOfClass:classObj:判断实例对象是否是这个类的子类的实例。

//判断p是否是NSObject的子类或其下子类的实例对象

BOOL b = [p isKindOfClass:[NSObject class]];

NSLog(@"%d",b);

2)-(BOOL)isMemberOfClass:classObj:判断是否时这个类的实例,不管是否时这个类的子类的实例。

//判断p是否为Person的实例对象

BOOL b1 = [p isMemberOfClass:[Person class]];

NSLog(@"%d",b1);

3)+(BOOL)isSubclassOfClass:classObj:判断类是否是指定类的子类

4)-(BOOL)respendsToSelector:selector:判断实例是否有这样方法能相应run方法

//判断实例对象是否能响应指定方法s1

SEL s2 = @selector(test);

BOOL b2 =[p respondsToSelector:s2];

NSLog(@"%d",b2);

5)+(BOOL)instancesResponndToSelector:判断类是否有这个方法。此方法是类方法,不能用在类的对象

44.构造方法

①构造方法的调用:完整的创建一个可用的对象:Person *p = [Person new]; new方法的内部会分别调用两个方法来完成3件事情:

1)使用alloc方法来分配存储空间(返回分配的对象);

2)使用init方法来对对象进行初始化;

3)返回对象的首地址;

45.自定义构造方法

①自定义搞糟方法的规范:

​1)一定是对象方法,以减号开头;

​2)返回值一般是id类型;

​3)方法名一般以initWith开头;

②实现:

//自定义构造方法的声明

-(instancetype)initWithName:(NSString*)name
andAge:(int)age;

//自定义构造方法的实现

-(instancetype)initWithName:(NSString*)name
andAge:(int)age{

if (self = [super init])
{

_name = name;

_age = age;

}

return self;

}

//使用自定义构造方法

Person *p = [[Person alloc]initWithName:@"蛋蛋" andAge:1];

​NSLog(@"name = %@,age = %d.",p.name,p.age);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: