关于OC 特有的语法

来源:互联网 发布:360免费wifi网络不稳定 编辑:程序博客网 时间:2024/05/16 12:59

这篇博客主要是关于OC 特有的语法,以前没怎么注意语言的特性,所以经常会出现一些细节的错误跟繁琐,知道一下特性会在你的coding中有很大的帮助,以下主要是我认为重要的,方便加强记忆。


@property

可以取代我们对成员变量的setter/getter 方法的声明与实现。

 @property  int  age;//int 为 age的类型,同时声明了(系统自动生成的一个私有成员变量_age)- (void) setAge:(int)age; -(int )age;

但是没有帮我们实现方法,我们还是要自己去.m文件中自己去实现。
或者我们在.m文件中使用

@synthesize age =_age;这样就会自动实现age的setter/getter 方法(如果_age 不存在,系统自动生成的一个私有成员变量_age)

@synthesize age默认是生成与age 同名的setter/getter 方法。
* 只用@property int age;既可以实现声明/实现与private _age 成员变量的添加。
** 我们使用了@property int age ;自己可以重写setter/getter方法,但当这俩方法同时手动实现,编译器不会生成不存在的成员变量。

id类型

id 可以理解为万能指针,只能修饰对象,可以操纵所有oc对象

(id=NSObject *)===》id d=[Person new];

构造方法

 Person * p =[Person new];//完整的创建一个可用对象,new这个类方法调用了俩个函数

分配存储空间+alloc 2,实现初始化- init
这个init 方法是系统固定的初始化方法,为了实现不同的初始化我们就要用到构造方法(构造方法就是初始化,返回类型为id)。
重写模板:

-(id)init{//一定要调用[super init]来声明初始化父类中的成员变量和其他属性If(self =[super init])  { //自己的独特初始化}  Return self;

自己定义带参数的构造方法:

-(id) initWithAge:(int)age{  If( self = [super init])  {   Self.age=age;   }   Return self}

分类

我们什么时候会用到分类呢?
当我们想添加或者更改某些方法时,就可以用分类。
* 其优点在于当我们参加一个大型项目开发时,一个庞大的类可以分模块开发,一个庞大的类可以由多个人来编写,更有利于团队合作,一个原始类可以有多个分类。
书写格式为:

@implementation 类名 (分类名称)// 方法实现@end
  • 在我们使用分类的时不能添加成员变量,但是可以实现原始类的方法,一般不这样做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法,多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效。

SEL类型

这个SEL是解释当一个对象调用方法的的内部过程。有兴趣可以认真研究下。
可以认为一个SEL类型对应一个方法,当我们知道某个SEL后都可以找到相对应的方法。
如何获取一个函数的SEL:SEL s = @selector(test);
调用对象p的test方法

[p performSelector:s];==[p test];

前者就是我们使用SEL间接调用,后者是直接调用。
当我们的方法需要参数时不要忘记冒号!!

SEL s = @selector(test:);[p performSelector:s withObject @”dgag”];

关于OC语言的一些特性我就记录到这了,重新又看了遍MJ的视频,感觉很多之前记住的又忘记了,还好写博客有帮我重新复习了遍,多敲敲代码就好了~~

0 0
原创粉丝点击