//
// main.m
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
/*
1. 首先id类型既然是一种类型,那么它就可以有一用途
> 定义变量
> 做函数返回值类型
> 做参数类型
2. id类型被称为万能指针类型, id ==NSString *
3. id的本质:typedef struct objc_object *id
4. 注意:
> 如果用id类型接收一个对象,调用对象特有方法不用进行强制类型转换
> id 是一个万能指针,可以用来指向任何对象, 注意id后面不要加*
*/
Person *p = [Person new];
[p setAge:10];
// 多态:用父类指针接收
NSObject *p1 = [Person new];
Person *p2 = (Person *)p1; // 这里为了使编译器编译通过,做强制类型转换
[p2 setAge:20]; // 而事实上,在运行的时候会动态绑定,自动找到真实类
return 0;
// id类型接收
id p3 = [Person new];
[p3 setAge:30];
}
//
// Person.h
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end
//
// Person.m
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
@end
// main.m
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
/*
1. 首先id类型既然是一种类型,那么它就可以有一用途
> 定义变量
> 做函数返回值类型
> 做参数类型
2. id类型被称为万能指针类型, id ==NSString *
3. id的本质:typedef struct objc_object *id
4. 注意:
> 如果用id类型接收一个对象,调用对象特有方法不用进行强制类型转换
> id 是一个万能指针,可以用来指向任何对象, 注意id后面不要加*
*/
Person *p = [Person new];
[p setAge:10];
// 多态:用父类指针接收
NSObject *p1 = [Person new];
Person *p2 = (Person *)p1; // 这里为了使编译器编译通过,做强制类型转换
[p2 setAge:20]; // 而事实上,在运行的时候会动态绑定,自动找到真实类
return 0;
// id类型接收
id p3 = [Person new];
[p3 setAge:30];
}
//
// Person.h
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end
//
// Person.m
// id类型
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
@end