⑦--OC核心语法

这篇是与第六篇衔接的,只有OC的核心语法的部分

1.id类型、id类型和instancetype类型的比较

id在OC中可以理解为是一个万能指针,它能够相当于任何数据类型的指针变量,也就是说在任何情况下,使用指针类型变量时实际上就相当于在使用一个id类型,OC语言中并没有像下面这样定义id类型,但是可以帮助我们理解:

#define id NSObject*

或者是这样:

typedef NSObject* id;

在实际开发中就可以把id当做 能操作任何 oc 对象的 万能指针类来使用了。如:

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    
    Person *p = [Person new];
    
    
    //id== NSObject *可以这样认为
    // 万能指针,能操作任何oc对象
    id d = [Person new];
    
    [d setAge:10];
    NSLog(@"%d", [d age]);
    return 0;
}

instanctype:

instanctype只能作为方法返回值,不能修饰变量.而当作为方法返回值时,它与id的主要区别是什么呢?

举个简单例子:

NSString *str = [Person person];
NSLog(@"%lu", str.length);

[Person person]返回值为id类型,则在编辑代码时xcode不会报错或者警告,运行时则会崩溃(因为OC是动态检测对象的真实类型);
反之,当其返回值为instanceType时,xcode则会报出警告.
所以,建议写类的方法时,对于返回值,如果是id类型的话,尽量使用instanceType.

根据Cocoa的命名规则,满足下述规则的方法:
1、类方法中,以alloc或new开头
2、实例方法中,以autorelease,init,retain或self开头

会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法,当使用这些类方法时,官方建议最好使用instancetype作为函数的返回值类型。

2.构造方法

在之前的学习中,创建一个类的方式是调用new这个类方法,如

[Person new];
其创建之后会返回一个Person类的实例,也就是一个Person对象,通常我们再使用一个Person类的指针接收它,以便之后的各种操作,如:

Person *p = [Person new];

new方法的实质是这样的:

new方法内部执行的过程

     完整地创建一个可用的对象

     1.分配存储空间 +alloc

     2.初始化 -init

new方法实际上调用了+alloc和-init两个方法返回类的对象。因此上面的代码

Person *p = [Person new];

实际上就相当于

Person *p = [[Person alloc] init];

分配空间+alloc这一步骤在相同类型的对象的创建过程是相同的,而初始化-init是不同的,因为不同的对象的属性值可能是不同的,现在我们就是通过使用不同的-init函数来进行对不同对象的构造,因而以后创建对象时要坚持使 用这种写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值