一.点语法
1.利用点语法可以替换set方法和get方法
Person *p = [ [Person alloc] init];
p.age = 25 等价于 [p setAge:25]
p.age 等价于[p age]
主要是看p.age是被赋值还是直接拿来用,被赋值则表示set方法,直接拿来用则是get方法。
2.点语法的本质
(1)点语法的本质还是方法调用,只是编译器特性。
(2)当使用点语法时,编译器会自动将它变成对应的方法。主要看点语法是直接拿来用还是被赋值的,然后替换成想要的get和set方法。
3.点语法的典型错误
get和set方法内部self.age的使用和方法和方法本身一致,就会死循环。
二.成员变量的作用域
局部变量和全局变量有自己的作用域,成员变量也有自己的作用域
1.成员变量修饰符(这些作用域的前提是你有这个成员变量的声明)
(1)@public:任何地方都可以直接访问对象的成员变量。
(2)@protected:可以在当前类以及其子类的方法中直接访问(@interface中声明的成员变量默认是@protected)。
(3)@privata:只能在当前类的方法中直接访问(@implementation中声明成员变量默认是@privata)。
(4)@package:同一个"体系内"(框架)可以访问,介于@privata和@public之间
2.补充
(1)没有@interface,只有@implementation,也可以开发一个类。几乎没人这么干,程序的可读性很重要,编程是个团队合作的。
(2)@interface和@implementation中不能声明同名的成员变量。
三.编译器特性-@property
1.@property
(1)@property是用在@interface中
(2)@property可以自动生成setter和getter方法的声明
(3)@property int age 就可以代替成员变量_age的get方法和set方法的声明,即等价于
- (int)age; // get方法
- (void)setAge:(int)age; // set方法
2.@synthesize
(1)@synthesize是用在@implementation中
(2)@synthesize可以自动生成setter和getter方法的实现
(3)@synthesize age = _age(不写= _age,则表示生成成员变量age的方法的实现) 就可以代替成员变量_age的get方法和set方法的实现,即等价于
- (int)age
{
return _age;
}
- (void)setAge:(int)age
{
_age = age;
}
3.注意
4.最后
(1)自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现,并生产_的成员变量,并且成员变量是定义在@impelementation中的私有变量。
四.id
1.id是万能指针,能指向\操纵任何OC对象,相当于NSObject *(但不等于)。
2.id本身已经是指针类型,不需要定义变量时在变量前面加上*。
3.id对象的变量不能用点语法,只能用直接用set和get方法。
五.构造方法
1.构造方法:用来初始化对象的方法,是个对象方法,-开头。类方法new其实是类方法+alloc(分配内存)和对象方法-init(初始化)的组合,先alloc再init。
2.重写构造方法
(1)目的:为了让对象创建出来,成员变量就会有一些固定的值。
(2)init方法会初始化已经分配好空间的对象。默认初始化值为0。但是有时需要有其他的默认值,就需要对init方法进行重写。重写格式:
- (id)init
{
if(self = [super init]) // 初始化父类后,判断初始化是否成功
{
_age = 25;
}
return self; // 返回一个已经初始化完毕的对象
}
(3)重写构造方法的注意:一定要先调用父类的构造方法([super init])初始化父类中的成员变量和其它属性,然后再进行子类内部成员变量的初始化
3.如果需要自己传入参数来初始化则就需要自定义构造方法,自己构造init方法
(1)返回值是id类型
(2)是对象方法,以-开头
(3)方法名以initWith开头 :- (id)initWithAge:(int)age
(4)如果自定义方法中一些变量在父类已经有了自定义构造方法了,就调用父类的这个构造方法,即父类的属性交给父类方法去处理,子类方法处理子类自己的属性。
六.多文件编程
1.每个类分开写在不同的文件中
2.类的声明放在.h文件中,类的实现放在.m文件
3.若想使用某个类,就包含某个类的.h声明文件。
七.补充
#pragma mark可以用来做在代码中做标记,方便查找代码。