Objective-C 特殊语法总结

来源:互联网 发布:mysql批量insert数据 编辑:程序博客网 时间:2024/05/01 09:31

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);



0 0