---------------------- IOS培训.期待与您交流! ----------------------
OC学习笔记三
---既然决定14年要好好的努力一次,那么就不要再轻言放弃,不再在随波逐流。只有努力过、拼搏过,才会知道自己行还是不行!为自己加油!---
---总结的知识点可能有不正确的地方,如果有发现请留言给我,我一定及时更正,不让错误的知识去误导大家,有好的意见也可大声提出来,小弟一定愿意采纳---
1.核心语法
OC点语法(与get set方法有关)//注意点语法是访问方法,不是成员变量,与JAVA区分开
p.age = 10; //实质 [p setAge:10]; 编译器会自动转换 因为带了参数所以是访问set方法
点语法不是访问get 就是set 方法
OC中访问成员变量 p->age;
2.成员变量的作用域
@private 只能在当前类的实现@implementation中直接使用
@protected 可以在当前类以及子类的实现@implementation中直接使用
@public 任何地方都可以直接访问
@package 同一个“体系内”(框架)可以访问,介于@private 和@public之间
子类想访问父类中@private修饰的成员变量只能通过get set 方法。
子类虽然不能直接访问@private修饰的成员变量,但是在子类内部是存在被@private修饰的变量的
如果你仅仅想把成员变量开放给子类,不允许其他类访问可以用protected修饰 ,只能在当前类和子类的对象中直接访问 其他类不行
在实现中也可以声明成员变量,但是不能与@interface 中的同名 如
@implementation
{
int _age; //在实现中声明的成员变量,在有些书籍会有这样的形式 默认就是私有的
}
@end
OC中成员变量在@interface中默认为protected 在@implementation中默认为private
没有@interface 只有@implementation也能开发一个类
OC中类的声明和成员声明一般都写在.h文件中,在编程是需要注意只有在前面引入.h文件了,才能利用对象去访问其中的方法和变量
3、@property 与 @synthesize 概要
帮助自动生成get set 方法
@property 自动生成某个成员变量的set 和get 声明
如 @property int age; 等价与下面两句
- (void) setAge:(int)age;
- (void) age;
注意 在利用@property 时需要注意后面变量的名字,不需要加下划线。只有成员变量才加下划线
@synthesize 帮助自动实现get set方法
如 @synthesize age = _age; 执行放回给成员变量_age
练习
@interface
{
int _age;
int age;
}
@property int age;
@end
@implementation
@synthesize age = _age; 指定给成员变量_age 实现get set 方法
@synthesize age = age; 指定给成员变量age 实现get set 方法 但是一般成员变量都是以下划线开头 ,这个只是例子为了演示
@end
4、@property 与 @synthesize最简写法形式一
{
int _age;
int _name;
}
@property int age, name
@synthesize age = _age, name = _name;
形式二(这是在xcode4及之前的版本)
@interface
@property int age;
@end
@implementation
//会访问_age这个成员变量,如果不存在,就会自动生成@rivate类型的_ageb变量
@synthesize age = _age;
@end
形式三(这是在xcode4之后的版本)
@interface
@property int age;
//一句话干了三件事情,声明变量、声明get set方法,实现get set方法,但是缺点是私有的private ,如果想不是私有的private那么就需要按照形式一的方法建立
@end
@implementation
@end
5、@property 与 @synthesize使用注意
@synthesize age;
//没有指定范围那个变量时,默认会访问age这个成员变量,如果没有age,就会自动创建@private类型的age变量
@synthesize age = _age; //指定访问_age变量
@property
用在@interface中
用来自动生成set 和get声明
@property 新特性
自从xcode 4.4 之后 @property 就独揽了@synthesize的功能,可以声明也可以实现,默认情况下回去访问下划线的变量
@synthesize
用在@implementation中
用来自动生成set 和get的实现
6、手动实现
若手动实现了set方法,编译器就只会自动生成get方法
若手动实现了get方法,编译器就只会自动生成set方法
若手动实现了set、get方法,编译器就会自动生成不存在的成员变量
7、OC中id类型
(id 是关键字,所以在创建变量时不能起名id)
id == NSObject *
万能指针,能指向任何OC对象,相当于 NSObject
在OC中id的定义
typedef struct objc_object {
Class isa;
} *id;
使用方法:
id p = [Person new]; //注意 id后面不需要加上*