黑马程序员-------OC中的一些核心语法
2015-10-09 10:54
253 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、编译器特性:点语法
点语法是OC为帮助其他语言程序员迅速掌握和适应OC来创造的语法,点语法的本质为set和get方法的调用,例如:
注意:即使有了点语法,set和get方法必须要有才能正确编译和执行,因为点语法的本质是set和get方法。
二、成员变量的作用域:
1> @public:在任何地方都能直接访问的成员变量;
2> @private:只能在当前类的对象方法中直接访问的成员变量;
3> @protected:能在当前类和其子类的对象方法中直接访问的成员变量;
当什么都不写的时候,默认成员变量是protected。
三、编译器特性:@property和@synthesize:
1> @property:自动生成某个成员变量的set和get方法声明,如:@property int age;自动生成_age变量的set和get方法声明。
2> @synthesize:自动生成某个成员变量的set和get方法实现,如:@synthesize age = _age;自动生成_age变量的set和get方法实现。
注意点:
1> 上述@synthesize语句会访问_age这个成员变量,如果不存在,就会自动生成这个成员变量;
2> Xcode4.4版本以后,@property可以自动生成成员变量的set和get方法声明、成员变量的set和get方法实现并且自动声明带有下划线的成员变量,但是成员变量的作用域为private;
3> @synthesize age = _age语句如果不写=后面的部分,会默认访问age变量而不是_age;
4> 只会在没有set或get方法的时候生成,如果代码中定义了set或者get方法,则只会生成缺少的那个方法,如果两个方法都有了,则什么都不会生成,包括成员变量;
四、id
id是一种变量类型,即id为关键字之一,id是万能指针,可以指向/操作任何OC对象,相当于NSObject *。
五、构造方法
构造方法init是用来初始化对象时调用的方法,是对象方法,重写构造方法的注意点有:
1> 一定要调用父类(super)的init方法,用以初始化在父类中定义的成员变量和其他属性;
重写init方法实例:
调用构造方法实例:
2> 自定义构造方法,规范有:
①一定是对象方法;
②返回值一般是id类型;
③方法名一般以init开头;
六、分类语法,category
分类为OC中特有的语法,可以给某一个类扩充一些方法,并且不改变原来类的代码。使用注意:
1> 分类只能增加方法,不能增加成员变量;
2> 分类中方法实现可以访问原来类中声明的成员变量;
3> 分类可以重新实现原来类中的方法,但是会重新覆盖掉原来的方法,导致原来的方法永远无法访问到,所以不建议这么做;
4> 方法调用的优先级:分类中的方法(最后编译的分类要高于前面编译的分类)–>类中的方法–>父类中的方法;
分类的写法参照下述小例子:
七、类的本质
1> 类本身也是一种对象,是Class类型的对象,简称类对象。
2> 当程序启动时,会将程序中所有的类都加载一次,类加载完毕后就会调用一次+ (void)load方法,先加载父类,再加载子类;
3> 当程序第一次使用这个类的时候,就会调用一次+ (void)initialize方法;
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、编译器特性:点语法
点语法是OC为帮助其他语言程序员迅速掌握和适应OC来创造的语法,点语法的本质为set和get方法的调用,例如:
`int main(int argc, const char * argv[]) { Person *p = [Person new]; //点语法:此处点相当于调用set方法,将值set进成员变量 p.age = 10; //点语法:此处相当于调用get方法,将值取出 int a = p.age; return 0; }`
注意:即使有了点语法,set和get方法必须要有才能正确编译和执行,因为点语法的本质是set和get方法。
二、成员变量的作用域:
1> @public:在任何地方都能直接访问的成员变量;
2> @private:只能在当前类的对象方法中直接访问的成员变量;
3> @protected:能在当前类和其子类的对象方法中直接访问的成员变量;
当什么都不写的时候,默认成员变量是protected。
三、编译器特性:@property和@synthesize:
1> @property:自动生成某个成员变量的set和get方法声明,如:@property int age;自动生成_age变量的set和get方法声明。
2> @synthesize:自动生成某个成员变量的set和get方法实现,如:@synthesize age = _age;自动生成_age变量的set和get方法实现。
注意点:
1> 上述@synthesize语句会访问_age这个成员变量,如果不存在,就会自动生成这个成员变量;
2> Xcode4.4版本以后,@property可以自动生成成员变量的set和get方法声明、成员变量的set和get方法实现并且自动声明带有下划线的成员变量,但是成员变量的作用域为private;
3> @synthesize age = _age语句如果不写=后面的部分,会默认访问age变量而不是_age;
4> 只会在没有set或get方法的时候生成,如果代码中定义了set或者get方法,则只会生成缺少的那个方法,如果两个方法都有了,则什么都不会生成,包括成员变量;
四、id
id是一种变量类型,即id为关键字之一,id是万能指针,可以指向/操作任何OC对象,相当于NSObject *。
五、构造方法
构造方法init是用来初始化对象时调用的方法,是对象方法,重写构造方法的注意点有:
1> 一定要调用父类(super)的init方法,用以初始化在父类中定义的成员变量和其他属性;
重写init方法实例:
//重写init方法,构造方法 - (id)init { if(self = [super init]) { _age = 10; _no = 1; } return self; }
调用构造方法实例:
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p = [[Person alloc] init];//使用构造方法创建类的对象 NSLog(@"age = %d,no = %d", p.age, p.no); return 0; }
2> 自定义构造方法,规范有:
①一定是对象方法;
②返回值一般是id类型;
③方法名一般以init开头;
//自定义构造方法 - (id)initWithAge: (int)age andNo: (int)no { if(self = [super init]) { _age = age; _no = no; } return self; }
六、分类语法,category
分类为OC中特有的语法,可以给某一个类扩充一些方法,并且不改变原来类的代码。使用注意:
1> 分类只能增加方法,不能增加成员变量;
2> 分类中方法实现可以访问原来类中声明的成员变量;
3> 分类可以重新实现原来类中的方法,但是会重新覆盖掉原来的方法,导致原来的方法永远无法访问到,所以不建议这么做;
4> 方法调用的优先级:分类中的方法(最后编译的分类要高于前面编译的分类)–>类中的方法–>父类中的方法;
分类的写法参照下述小例子:
//分类的声明 #import "Person.h" @interface Person (sdz) - (void)study; @end
//分类的实现 #import "Person+sdz.h" @implementation Person (sdz) -(void)study { NSLog(@"-----------"); } @end
七、类的本质
1> 类本身也是一种对象,是Class类型的对象,简称类对象。
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p1 = [[Person alloc] init]; Person *p2 = [[Person alloc] init]; Person *p3 = [[Person alloc] init]; //获取内存中的类对象(第一种方式) Class c1 = [p1 class]; Class c2 = [p2 class]; Class c3 = [p3 class]; //获取内存中的类对象(第二种方式) Class c4 = [Person class]; //c1\c2\c3\c4都指向内存中person类对象,地址相同 NSLog(@"%p, %p, %p, %p", c1 ,c2, c3, c4); //拿到类对象后(即c1、c2、c3、c4)可以调用类方法 [c1 test]; return 0; }
2> 当程序启动时,会将程序中所有的类都加载一次,类加载完毕后就会调用一次+ (void)load方法,先加载父类,再加载子类;
3> 当程序第一次使用这个类的时候,就会调用一次+ (void)initialize方法;
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
相关文章推荐
- 黑马程序员---成长之路-----OC之基础篇类方法与对象方法的比较
- 七个对我最重要的职业建议(译文)
- 程序员的路——程序员的年龄天花板
- 黑马程序员---OC学习笔记之copy概念及入门
- 一位职业程序员的进化过程
- 剑指Offer:面试题11 整数的整数次方
- 黑马程序员---OC学习笔记之集合对象的内存管理
- 黑马程序员---OC学习笔记之NSDate的介绍和使用
- 小明的程序员之路
- 程序员如何快速从“码畜”到“中级水平”需要的10个秘诀
- java面试题链接
- 黑马程序员---成长之路-----OC之基础篇类方法
- 互联网公司面试需要准备的东西
- (转)第零章 序 我的云朵小姐 又名 孤独的程序员
- PHP程序员不应该忽略的3点
- 使一个程序员崩溃不需用枪,改三次需求即可
- 从内在缓解职场压力更有效
- 蜂窝教育让更多学子实现IT梦想
- 携程java面向对象面试题
- Java程序员常犯的10个错误