1.特有语法
@property 是一个编译器特性,用来自动生成成员变量的get/set方法声明(xcode4.4以前)
> 告诉property要生成的get/set方法声明的成员变量类型是什么
> 告诉property要生成的get/set方法是哪个属性的,属性名称去掉下划线
@property int age;//注意:这个地方成员变量的名称写去掉下划线后的
2.synthesize
@synthesize用来自动生成get/set方法的实现
@synthesize age 意思是给.h文件中名称叫做age的property生成实现
@synthesize age= _age;
如果没有明确告诉synthesize后面的age要赋值给谁它就会赋值给和它同名的成员变量
@synthesize age;
3.property增强
xcode4.4以后property做了增强
> 帮助我们自动生成get/set方法的声明
> 帮助我们自动生成get/set方法的实现
> 如果没有手动声明成员变量,perperty会在.m文件中自动帮我们生成一个_开头的成员变量
>注意点:如果想让子类继承父类的成员变量,还是必须在.h中手动写成员变量
4.get/set方法重写
重写set方法
1.当想控制外界传入的一些数据的合理性安全性的时候我们就需要手动实现set方法
- (void)setAge:(int)age
{
_age = age;
if (_age < 0) {
_age = 0;
}
}
2.当我们手动同时实现了set/get方法的时候,property就不会自动给我们生成成员变量
5.OC私有方法
只有实现,没有声明我们称之为私有方法
6.id类型
id ==NSObject *
id的本质: typedef struct objc_object *id;
如果用id类型接收一个对象,调用对象特有方法不用进行强制类型转换
id 是一个万能指针,可以用来指向任何对象,注意id后面不要加*
7.构造方法基本概念
> 开辟存储空间 +alloc //用来开辟存储空间,会返回一个没有初始化的对象
> 初始化成员变量 -init // 对对象中的成员变量进行初始化,返回一个初始化后的对象
> 返回地址
开辟存储空间,会返回一个没有初始化的对象
对对象中的成员变量进行初始化,返回一个初始化后的对象
开发中常用写法
如果想让对象一出生它的某些属性就是一些固定的值,我们可以重写init方法
init方法的作用 :用于对类的成员变量进行初始化
重写NSObject的init初始化方法注意点:
>一定要调用super init 方法,初始化父类的东西
>一定要判断self是否为nil
>一定要返回self
- (id)init
{
self = [super init];// 如果父类初始化失败会返回nil
if (self != nil) {
// 说明父类初始化成功,我们才开始初始化子类特有的东西
_age = 18;
}
return self;
}
注意点:初学者记住不要写成(self == [super init](错误写法)
if (self = [superinit]) {
oc 当中使用nil调用方法(发送消息),不会报错
9.自定义构造方法
当想让某个对象一出生就拥有指定的属性的时候就可以使用自定义构造方法
// 自定义构造方法纯粹就是自己按照一定的约定书写的一个方法
> 一定是对象方法 -号开头
> 方法名称一般以init开头
> 返回值一般是id
11.new方法原理
+ (id)person
{
// return [[Person alloc]init];
// self 谁调用就代表谁,提高扩展性
return [[self alloc]init];
}
+ (id)personWithAge:(int)age
{
Person *p = [self person];
[p setAge:age];
return p;
}