OC_id类型
博客正式开通啦!以后会每天为大家更新知识,将过去学习的笔记发布出来。供大家学习交流。
在Objective-C 中,id 类型是一个独特的数据类型。在概念上,类似Java 的Object 类,可以转换为任何数据类型。换句话说,id 类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。例如,下面定义了一个id类型的变量和返回一个id类型的方法:
- id object;
- - (id) newObject: (int) type;
id 和void *并非完全一样。下面是id在objc.h中的定义:
- typedef struct objc_object {
- Class isa;
- } *id;
下面做一个案例来分析id数据类型
学生类的头文件代码Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_name; //定义成员变量name;
NSString *_sid;
}
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)NSString *sid;
+(Student *)studentWithName:(NSString *)name andSid:(NSString *)sid;
-(instancetype)initWithName:(NSString *)name andSid:(NSString *)sid;
-(void)print;
@end
学生类的实现文件代码Student.m
- #import "Student.h"
- @implementation Student
- -(instancetype)initWithName:(NSString *)name andSid:(NSString *)sid
- {
- self = [super init];
- if (self) {
- _name = name;
- _sid = sid;
- }
- return self;
- }
- +(Student *)studentWithName:(NSString *)name andSid:(NSString *)sid
- {
- //在类方法中由于还没有创建实例,所有self不能使用
- return [[Student alloc]initWithName:name andSid:sid];//类方法是通过类名使用的,不能创建新的实例变量
- }
- -(void)print
- {
- NSLog(@"name = %@,sid = %@",_name,_sid);
- }
- @end
测试文件代码main.m
- #import <Foundation/Foundation.h>
- #import "Student.h"
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- Student *stu = [Student studentWithName:@"zhangsan" andSid:@"123456"];
- [stu print];
- id temp;
- temp = stu;
- [temp print];
- }
- return 0;
- }
结果输出如下:
分类:
Objective-C开发篇
标签:
Object-C基础
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期