IOS 类和对象

iOS对象和类的本质: 对象的本质是结构体,而id,是指向这个结构体的指针,也就是我们平时Person *p = [Person alloc] init]; 的话,代表我们创建了一个Person对象分配了地址,并且把他的地址给了p这个指针,我们是通过p来操作对象,或者说p代表了对象,但p并不是对象本身。 同样的,类的本质也是结构体(其实类也是一个对象,我们称之为类对象,这个后面再说),而Class是指向这个结构体的指针... 阅读详情

下图中是一段的类声明的语法展示,声明了一个叫做 MyClass的类,它继承于根类:NSObject。(根类可以被所有的其他类直接或间接继承。)


下图是一个方法的语法展示,方法的声明由以下几个部分构成:方法类型标识符,返回类型,一个或多个方法签名关键字,以及参数类型和名称。



2、创建类

1.1、新建Single View app模版项目,按Command + N新建文件,创建类Student,继承与NSObject


1.2、生成student.h  和student.m


  • #import <Foundation/Foundation.h>  
  •   
  • @interface Student : NSObject  
  •   
  • @end  


  • #import "Student.h"  
  •   
  • @implementation Student  
  •   
  • @end  


1.3、在头文件里添加类成员变量和方法

@interface


  • #import <Foundation/Foundation.h>  
  •   
  • @interface Student : NSObject  
  • {  
  •     NSString *studentName;  
  •     NSInteger age;  
  • }  
  •   
  • -(void) printInfo;  
  • -(void) setStudentName: (NSString*) name;  
  • -(void) setAge: (NSInteger) age;  
  • -(NSString*) studentName;  
  • -(NSInteger) age;  
  • @end  

 

 

  • @interface 类的开始的标识符号,好比Java  或 C语言中的Class   
  • @end 类的结束符号
  • 继承类的方式:Class:Parent,如上代码Student:NSObject
  • 成员变量在@interface Class: Parent { .... }之间
  • 成员变量默认的访问权限是protected。
  • 类成员方法在成员变量后面,格式是:: scope (returnType) methodName: (parameter1Type) parameter1Name;
  • scope指得是类方法或实例化方法。类方法用+号开始,实例化方法用 -号开始。

 

1.4、实现类中的方法

@implementation


  • #import "Student.h"  
  •   
  • @implementation Student  
  •   
  • -(void) printInfo  
  • {  
  •     NSLog(@"姓名:%@ 年龄:%d岁",studentName,studentAge);  
  • }  
  • -(void) setStudentName: (NSString*) name  
  • {  
  •     studentName = name;  
  • }  
  • -(void) setAge: (NSInteger) age  
  • {  
  •     studentAge = age;  
  • }  
  • -(NSString*) studentName  
  • {  
  •     return studentName;  
  • }  
  • -(NSInteger) age  
  • {  
  •     return studentAge;  
  • }  
  •   
  • @end  

 

1.5、在View中创建类对象,调用方法。


  • - (void)viewDidLoad  
  • {  
  •     [super viewDidLoad];      
  •     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  •       
  •     Student *student = [[Student alloc]init];  
  •     [student setStudentName:@"张三"];  
  •     [student setAge:10];  
  •     [student printInfo];  
  •     [pool release];  
  •   
  • }  

 

 

  • Sutdent *student = [[Sutdent alloc] init];这行代码含有几个重要含义
  •  [Student alloc]调用Student的类方法,这类似于分配内存,
  •  [object init]是构成函数调用,初始类对象的成员变量。

 

打印结果:


  • 姓名:张三 年龄:10岁  

 

2、类的实例方法使用多个参数

2.1添加一个多参数的方法和实现


  • ....  
  • -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age;  
  • ....  



  • ....  
  • -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age  
  • {  
  •     studentName = name;  
  •     studentAge = age;  
  • }  
  • ....  

 

2.2调用


  • - (void)viewDidLoad  
  • {  
  •     [super viewDidLoad];      
  •     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  •       
  •     Student *student = [[Student alloc]init];  
  •     [student setNameAndAge:@"李四" setAge:20];  
  •     [student printInfo];  
  •     [student release];  
  •     [pool release];  
  • }  

打印结果:


  • 姓名:李四 年龄:20岁  

 

3、自定义构造函数

3.1声明和实现构造函数


  • ....  
  • -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age;  
  • ....  


  • ....  
  • -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age  
  • {  
  •     self = [super init];  
  •       
  •     if ( self ) {  
  •         [self setNameAndAge:name setAge:age];  
  •     }  
  •       
  •     return self;  
  • }  
  • ....  

 

-(id)init 这个方法用于类的初始化创建,每一个类在创建的时候需要调用init方法,使用父类的init方法得到了self,这就可以做一些子类初始化的工作

3.2使用自定义构造函数:


  • - (void)viewDidLoad  
  • {  
  •     [super viewDidLoad];      
  •     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  •     Student *student = [[Student alloc]initWithNameAndAge:@"rongfzh" setAge:6];  
  •     [student printInfo];  
  •     [student release];  
  •     [pool release];  
  • }  
iOS 底层探索篇 ——类的加载原理补充,类拓展和关联对象 iOS 底层探索篇 ——类的加载原理补充,类拓展和关联对象1.分类加载是否需要排序2.methodList的数据结构3.主类没有实现load方法,分类实现load方法时的数据加载4.class_ro_t5.类扩展6.关联对象 1.分类加载是否需要排序 由上一篇文章知道,在方法列表中,2个分类的方法的数组指针是在主类之前的,并且数组指针里面是经过排序的。 首先添加2个分类,并且类和2个分类都有一个方法叫做testfunc1。 运行,看到getMethodNoSuper_nolock里面。看到这里是遍历查找。 阅读详情

相关推荐

ios快捷指令进行钉钉打卡

首先 1、打开快捷指令 2、自动化 3、创建个人自动化-特定时间 4、添加操作-搜索“随机数” 5、最小值和最大值填充 6、添加操作-搜索“等待” 7、长按“1秒钟”,选择魔法变量,选择上一步的随机数 6、添加操作-搜索“钉钉” 7、选择钉钉-随便一个聊天窗口。 8、添加操作-搜索“等待”,这次将等待时间设为10秒 9、添加操作 “搜索天气” ,选择显示天气。 注意点: 1、此操作依赖于钉钉极速打卡,只是帮忙唤起钉钉。 2、保存自动化时有个运行前询问,务必关掉。 3、手机不能设

blaze_jack 5万+

iOS 类的分类、非正式协议、延展

分类,非正式协议,延展

weixin_45958328的博客 489

docker安装fastdfs+nginx配置

docker安装fastdfs+nginx,实现图片或文件的上传与下载

weixin_47325126的博客 2193

【iOS】类结构分析

本文深入探讨了Objective-C中类的底层结构和原理。通过反编译和源码分析,揭示了类的本质是objc_class结构体,它继承自objc_object,表明“万物皆对象”。objc_class包含isa指针、父类指针、方法缓存和类数据等属性,其中isa指针用于关联元类。类的属性和方法存储在class_data_bits_t中,而成员变量则存放在class_ro_t中。实例方法存储在类中,类方法存储在元类中。文章还解释了isKindOfClass和isMemberOfClass方法的区别,并提供了....

2301_80095702的博客 1206

银河麒麟服务器操作系统V10 SP1:跨架构激活与设备更换无忧指南

本文详细解析了银河麒麟服务器操作系统V10 SP1的跨架构激活新特性。该特性彻底解除了授权与CPU架构的绑定,允许同一份授权在x86、ARM、龙芯等不同架构服务器间灵活使用。文章提供了从新设备激活到硬件更换后保持激活状态的全流程实战指南,并分享了内网环境部署等高级技巧,助力企业简化运维、提升硬件资源管理灵活性。

ff678的博客 353

西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践

本文详细解析了西门子OMAC PackML V2022在S7-1200/S7-1500中的状态机设计与应用实践。通过实际案例和代码示例,介绍了状态机的基础认知、硬件配置、逻辑开发、调试技巧以及与MES系统集成的高级应用,帮助工程师高效实现设备自动化控制。

weixin_29255731的博客 534

iOS--oc对象,类,和元类本质

最近在学习runtime的过程中,发现其中消息发送-动态方法解析-消息转发中涉及到了大量的类与对象的底层知识,看别人博客的时候,别人往往也会先讲一遍oc对象的本质;具体参考了iOS底层原理总结 - 探寻OC对象的本质@publicint _no;int _age;int _no;int _age;此结构体占用多少存储空间,对象就占用多少存储空间。

m0_74217598的博客 1682

【OpenClaw 实战】Ubuntu 双机 Gateway + Node 部署全流程 + 所有常见坑(2026版)

如果你只是需要浏览器自动化、截屏、简单系统查询 →Node 模式够用,别折腾 exec。如果你需要 GOLD 运行任意 shell 命令、git、npm、自定义脚本 →必须升级成 Gateway。bind lan + pairing approve + token 统一。后续想玩多 Agent 团队,优先考虑双/多 Gateway + 聊天通道互发(社区已有不少成功案例)。欢迎评论区留言你的环境和报错,一起交流!

hampeter的博客 1547

iOS ------ 类 父类 元类的总结

类在OC中其实是指向objc_class的结构体指针,结构体构造我Class isa;long info;OC中的对象全部继承objc_object结构体在OC中,对象的类是isa指针决定的,即isa指针指向对象所属的类。类的isa指针指向类它所属的元类。OC对象在发生消息时,运行时库会寻找对象isa指针找到随想所属的类。这个类包含了能应用于这个类所有的实例方法以及指向父类的指针,以便找到父类的实例方法。运行时库会坚持这个类和其父类的方法列表,遭到于消息对应的方法。

m0_73974056的博客 1101

Codex入门24-效率倍增秘籍(终极总结:10个让你开发速度翻倍的Codex高级技巧)

专栏收官之作!经过前23篇的系统学习,你已经掌握了 Codex CLI 的核心用法。本文浓缩10个实战验证的高级技巧:管道化提示词将复杂任务拆成递进指令链,模板化 SKILL.md 打造个人技能库,Shell 别名让操作快如闪电,多模型切换省钱又高效……这不是理论课,每个技巧都配有可直接运行的代码。掌握全部10招,构建你的 AI 开发工作流闭环,让开发速度真正翻倍!

yueyeguzhuo的专栏 191

YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题

SBA 模块在医疗图像分割中具有重要作用,其设计出发点是解决图像中物体边界模糊以及融合特征时的冗余和不一致问题。

Limiiiing的博客 1943

iOS——分类、扩展和关联对象

回顾一下什么是分类、什么是扩展:分类(Category)和类扩展(Extension)是两种常见的代码组织方式,用于扩展类的功能。

m0_73348697的博客 1779

华为OD机试 - 跳房子I(Java 双机位A卷 100分)

可行的两步组合有 [1, 2] (索引和 0+3=3)、[1, 2] (索引和 0+4=4)、[4, 2] (索引和 1+3=4)、[4, 2] (索引和 1+4=5)、[5, 2] (索引和 2+3=5)、[5, 2] (索引和 2+4=6)。此样例有多种组合满足两回合跳到最后,譬如[-1,9], [2,6],其中[-1,9]的索引和为0+3=3, [2,6]的索引和为1+4=5, 所以索引和最小的步数组合为[-1,9].[3, 2] 和 [1, 4] 都满足和等于 5,且索引和均为 3。

学Java,找哪吒 4508

iOS中类和对象的底层原理

详细讲解iOS类和对象的本质,一层层一步步解开类和对象的神秘面纱,如果有不对的地方还请指导。 **文章最后有个测试用例可以用来检验类和对象的底层实现原理**

xuyushiguang的博客 543

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

iOS-类和对象之本质

iOS界比较流行的一句话:万物皆对象!为什么会有这么一个说法呢?难道类(class)也是对象(object)?对象其本质又是什么?这些问题在实际开发中或许遇不到,但当真的涉及到底层的开发,就要面对这些问题。想要透析对象的本质,就要了解运行时(runtime),苹果已经将 Object-C runtime 代码开源了,从:http://opensource.apple.com/source/objc...

SSY_1992的博客 1200

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[iOS]类和对象的底层原探索

[iOS]类和对象的底层原探索

m0_74703932的博客 1630

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ios开发之OC基础-类和对象

ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点。建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来。这样的学习...

dichuangheng8094的博客 217

iOS概念入门学习-OC-类和对象

概要:本文介绍了类和对象的基础知识和其简单地应用。

cuin123的博客 620

ios学习笔记(一)包括类和对象的初始化

** ios上课学习 ** 2018-9-6 ios初步的语法简介和相关类型 //: Playground - noun: a place where people can play import UIKit //可以用let或者var定义 let label = &amp;amp;amp;quot;The width is&amp;amp;amp;quot; //用\()可以将数据转换成字符串 //补码在计算机负数总比证书多一个数 //

babe的博客 878

【iOS】—— 类和对象底层探索

OC对象在发送消息时,运行时库会追寻着对象的isa指针得到对象所属的类。这个类包含了能应用于这个类的所有实例方法以及指向父类的指针,以便可以找到父类的实例方法。运行时库检查这个类和其父类的方法列表,找到与消息对应的方法。编译器会将消息转换为消息函数objc_msgSend进行调用我们可以知道,OC的类其实也是一个对象,一个对象就要有一个它属于的类,意味着类也要有一个isa指针,指向其所属的类。那么类的类是什么呢?就是我们所说的元类(MetaClass),所以,元类就是类对象的所属类。

m0_62386635的博客 834

iOS开发 类和对象的理解

OC-类和对象的理解 OC语言里,每一个类实例对象是一个指向objc_object结构体的指针,每一个类对象是一个指向objc_class结构体的指针。在objc_object结构体中仅有一个isa指针成员。 /// Represents an instance of a class. struct objc_object { Class _Nonnull isa OBJC_ISA_AVAILABILITY; }; 而在objc_class结构体中,除了isa指针之外它还有例如name(类名)、

qq_33655517的博客 186

iOS底层探索之对象的本质和类的关联特性initIsa(上)

1.对象的本质 在上篇博客iOS开发之结构体底层探索 里面已经讲过了,对象的本质是结构体,那么可能还有一些小伙伴不太明白。那么我们就复习一下,再带着小伙伴们简单探索一下。 我只需要建立一个工程,建立一个Student类,使用Clang命令,编译成底层的源码,再去源码里面看看就知道了。 @interface Student : NSObject @end @implementation Student @end int main(int argc, const char * argv[]) { @auto

俊而不逊的博客 891

IOS中类和对象还有,nil/Nil/NULL的区别

IOS中类和对象还有,nil/Nil/NULL的区别  (2013-03-06 10:37:16) 转载▼   分类: IOS学习 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法)。 对象是类的一个实例,是一个具体的事物。 类与对象是抽象与具体的关系。

夜-feng的专栏 1403

iOS ------ 对象和类

return 0;} return 0;} return 0;} return 0;} return 0;} return 0;} return 0;} return 0;

m0_73974056的博客 1134

iOS-类和对象的见解

类什么是类?类就是具有相同特性和行为的对象的抽象。举个简单的例子,老师类。那么老师是一个类,老师分很多种,可能是语文老师,可能是数学老师,也可能是苍老师,这些是具体的对象,也叫具体的实例。而这些具体职业的老师里面,都具有相同的特征和行为,就是教学,育人。而这些具体职业的老师统称为老师,也就是老师类,是具体对象的抽象。 类方法:类方法,也叫静态方法。 类方法由类名直接调用。 类方法注意点:类方法一般用

追求灵魂代码 402

IOS中类和对象de区别

类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法)。 对象是类的一个实例,是一个具体的事物。 类与对象是抽象与具体的关系。 类其实就是一种数据类型,它的变量就是对象。 类与类之间的关系——继承关系 A是B 如果这句话说的通,在设计程序的时候就可以看成是继承关系。 例如:学生与小学生 小学生也是学生,所以学生是小学生的父类,小...

weixin_30767835的博客 123
上一篇: IOS 内存管理
下一篇: IOS 常用快捷键----蓝懿教育
NameUseNsstring
博客等级 码龄11年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值