黑马程序员——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);
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);
相关文章推荐
- objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
- [__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x17deba00
- Objective-C中的@property和@synthesize用法
- Effective Objective C 2.0
- 【转】Objective-C 与 Runtime:为什么是这样?
- JSONObject与JSONArray的使用
- error LNK2001: unresolved external symbol "public: virtual struct QMetaObject
- Objective-C可变参数方法的定义和使用
- Objective C,UIScrollview居中显示子视图
- 对象序列化到本地文件 ObjectOutputstream ObjcetInputstream
- 对象序列化到本地文件 ObjectOutputstream ObjcetInputstream
- struts2中的constant介绍之struts.objectFactory与spring的整合
- Swift学习: 从Objective-C到Swift
- The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
- object类
- Type 'Insus.NET.PictureObject' in Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
- Objective-C 与 Runtime:为什么是这样?
- utils object doesn,t exists中毒后,就删除了.JS文件后台就出现了前面的英文。请问怎么解决
- iOS7之后JavaScript与Objective-C之间的通信
- Objective-C 【protocol-协议 的了解使用】