黑马程序员——OC---OC特有语法01
2014-11-25 18:44
267 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一 点语法
OC设计点语法的目的,是为了让其他语言的开发者可以很快的上手OC语言开发,使用点语法,让它和其他面向对象的语言如java很像。其调用方法如下:
其实说到点语法的本质就是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。如:
Stu.age=10;展开为:[stu setAge:10];
int a=stu.age;展开为:[stu age];
编译器如何知道是set方法还是get方法?主要是看赋值。在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。
另外,使用点语法时,应该注意,以下两种会出现出现的情况:、
(1)在set方法中,self.age=age;相当于是[self setAge:age];
(2)在get方法中,return self.age;相当于是[self age];
二 成员变量的作用域
局部变量、全局变量都有自己的作用域,成员变量也不例外,也有自己的作用域。变量的作用域主要分为四种:
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问
三 @property和@synthesize
@property用在@inteface中可以自动生成某个成员变量的setter和getter声明。例如用@property int age;就可以代替下面的两行:
- (int) age; //geter
- (void)setAge:(int)age;
//setter
类似地,@synthesize用在@implementation中,用来自动生成setter和getter的实现,例如,@synthesize age = _age。注意,如果成员变量_age不存在,就会自动生成一个@private的成员变量_age。从新版本开始(4.2吧好像是),@synthesize已经不用了,因为@property已经可以自动生成声明和实现。
四
id类型
id在OC中是一个万能指针,可以指向任何的OC对象,相当于NSObject
*,其定义如下。要注意,使用时,id后面不要加上*,例如id p = [Person new]。其局限性体现在,当调用一个不存在的方法时,编译器会马上报错。
构造方法
对象的创建可以分为两步走:其中init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,一减号开头。默认初始化完毕后,所有成员变量的值都为0。
1>+
alloc 方法 分配存储空间
2>- init 方法初始化
我们在实际开发过程中经常需要对构造方法进行重写,重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值。在重写构造方法的
过程中应该注意,先调用父类的构造方法([super init]),再进行子类内部成员变量的初始化,重写构造方法的规范:例如代码如下:
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型
(3)方法名一般以initWith开头
一 点语法
OC设计点语法的目的,是为了让其他语言的开发者可以很快的上手OC语言开发,使用点语法,让它和其他面向对象的语言如java很像。其调用方法如下:
Person *p = [Person new]; p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; p.name = @"Jack"; NSString *s = p.name; NSLog(@"%@", s);
其实说到点语法的本质就是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。如:
Stu.age=10;展开为:[stu setAge:10];
int a=stu.age;展开为:[stu age];
编译器如何知道是set方法还是get方法?主要是看赋值。在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。
另外,使用点语法时,应该注意,以下两种会出现出现的情况:、
(1)在set方法中,self.age=age;相当于是[self setAge:age];
(2)在get方法中,return self.age;相当于是[self age];
二 成员变量的作用域
局部变量、全局变量都有自己的作用域,成员变量也不例外,也有自己的作用域。变量的作用域主要分为四种:
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问
三 @property和@synthesize
@property用在@inteface中可以自动生成某个成员变量的setter和getter声明。例如用@property int age;就可以代替下面的两行:
- (int) age; //geter
- (void)setAge:(int)age;
//setter
类似地,@synthesize用在@implementation中,用来自动生成setter和getter的实现,例如,@synthesize age = _age。注意,如果成员变量_age不存在,就会自动生成一个@private的成员变量_age。从新版本开始(4.2吧好像是),@synthesize已经不用了,因为@property已经可以自动生成声明和实现。
四
id类型
id在OC中是一个万能指针,可以指向任何的OC对象,相当于NSObject
*,其定义如下。要注意,使用时,id后面不要加上*,例如id p = [Person new]。其局限性体现在,当调用一个不存在的方法时,编译器会马上报错。
typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id;五
构造方法
对象的创建可以分为两步走:其中init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,一减号开头。默认初始化完毕后,所有成员变量的值都为0。
1>+
alloc 方法 分配存储空间
2>- init 方法初始化
我们在实际开发过程中经常需要对构造方法进行重写,重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值。在重写构造方法的
过程中应该注意,先调用父类的构造方法([super init]),再进行子类内部成员变量的初始化,重写构造方法的规范:例如代码如下:
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型
(3)方法名一般以initWith开头
@implementation Person // 重写-init方法 //- (id)init //{ // // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性 // self = [super init]; // 当前对象 self // // // // 2.如果对象初始化成功,才有必要进行接下来的初始化 // if (self != nil) // { // 初始化成功 // _age = 10; // } // // // 3.返回一个已经初始化完毕的对象 // return self; //} - (id)init { if ( self = [super init] ) { // 初始化成功 _age = 10; } // 3.返回一个已经初始化完毕的对象 return self; } @end
相关文章推荐
- 黑马程序员-8-Objective-C学习笔记(OC特有语法)
- 黑马程序员--oc:特有语法2
- 黑马程序员---OC特有语法(一)
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 黑马程序员 OC语言 - 4 OC特有语法
- 黑马程序员——OC语言------OC特有语法:分类、description、类对象、SEL
- 黑马程序员_ios基础总结9_OC特有语法
- 黑马程序员_OC基础01_基础语法
- 黑马程序员(OC特有语法-block和-Protocol)
- 黑马程序员_OC基础01_基础语法
- 黑马程序员——OC基础---OC特有语法
- 黑马程序员-IOS-OC基础-OC特有语法
- 黑马程序员---iOS-OC特有的语法1
- 黑马程序员---OC特有的语法
- 黑马程序员 oc的特有语法
- 黑马程序员—OC(归纳总结OC特有的语法)
- 黑马程序员_oc特有语法一:分类Category和类扩展
- 黑马程序员--Objective-C——OC特有语法一
- 黑马程序员-OC语言基础:OC特有语法
- 黑马程序员_OC特有语法