OC笔记 - 特有语法(2015.1.30)

本文详细介绍了Objective-C中的属性声明与实现方法,包括@property和@synthesize的使用,以及属性增强功能。此外还讲解了如何重写get/set方法,并探讨了Objective-C中的构造方法,包括初始化过程和自定义构造方法的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值