------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一 点语法
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
本文深入探讨了Objective-C语言中的点语法及其本质,详细解释了如何使用点语法调用方法而非访问成员变量,并阐述了成员变量的作用域,包括@public、@protected、@private和@package四种访问级别。同时介绍了@property和@synthesize的作用,以及id类型的使用场景,最后讲解了构造方法的创建与重写规范。
1731

被折叠的 条评论
为什么被折叠?



