iOS 类方法和实例方法的区分和使用

iOS中类方法和实例方法 对比静态方法和动态方法 阅读详情

最近有的朋友问我这个类方法和实例方法的区别,在这就总结下吧,参考了一些文档。

OC里面既有实例方法也类方法。类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenience method)。工厂方法的称谓明显和一般意义上的工厂方法不同,从本质上来说,类方法可以独立于对象而执行,所以在其他的语言里面类方法有的时候被称为静态方法。

1、区别

“-“开头的是实例方法  “+”开头的是类方法,实例方法用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类。
静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,
所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,
而且静态内存是有限制的,太多了程序会启动不了。

2、使用场景

如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例方法。

类方法正好相反,它不需要访问或者修改某个实例的成员变量。

类方法一般用于实现一些工具方法,比如对某个对象进行扩展,或者实现单例。


3.注意点

   注意点一:类方法
   1、类方法可以调用类方法。
   2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
   3、类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
   4、类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。
  注意点二:self的规则
   1、实例方法里面的self,是对象的首地址。
   2、类方法里面的self,是Class.


// 类方法

+(Student *)studentWithID:(NSInteger)ID name:(NSString *)name gender:(NSString *)gender

{

    Student *stu =nil;

    if (stu ==nil) {

        // 类方法不可以使用实例变量。

        // 不可以直接使用self.name

        stu.name = name;

        stu.ID = ID;

        stu.gender = gender;

        

        // 类方法可以调用类方法。

        // 类方法可以使用self,因为self不是实例变量。类方法里面的self,是Class.

        [selfgo];

        

        // 类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。

        Student *abc = [[Studentalloc] init];

        [abc plays];

    }

    

    return stu;

    

}


// 实例方法

-(void)plays {

    // 实例方法里面的self,是对象的首地址。

    self.name  =@"讲解";

}


// 类方法

+(void)go {

    NSLog(@"调用了");

}



浅析iOS中实例方法和类方法 OC中实例方法和类方法 阅读详情

相关推荐

开源大模型推理GPU资源评估以及优化

随着大模型的火热很多项目中都使用到了开源大模型,这时候准确评估大模型的GPU资源非常重要,主要有下面几个方面:GPU是昂贵的资源。高估内存需求可能导致在硬件上的不必要支出,而低估则可能导致系统故障或性能下降。:适当的内存管理确保模型高效运行,能够更快地响应用户并处理更多并发请求。:随着需求的增长,理解内存需求对于在不牺牲性能或产生高昂成本的情况下扩展服务至关重要。尽管其重要性显而易见,但计算用于服务大型语言模型(LLM)的GPU内存并不简单。

优快云DN的博客 3116

iphone上面判断一个对象是否是某个类的对象的方法

iphone上面判断一个对象是否是某个类的对象的方法      NSObject类的 一个函数叫做: - (BOOL)isKindOfClass:(Class)aClass;    例子代码如下:    BOOL bHeadSprite=[sprite isKindOfClass:[UserHeadSprite class]]; if (bHeadSpri

tangaowen的专栏 5522

(详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估计要搞吐。然后就想能不能用python的爬虫来实现,虽然过程比较苦(后期改bug改的要吐了)。但是会后还是将需求实现了。这基本也算是入门了 urllib、requests、selenium这几个py...

man_tou_22 1万+

ios类方法和实例方法的区别和使用场景

区别 静态方法在程序开始时生成内存,实例方法在程序运行中生成内存, 所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。 静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快, 而且静态内存是有限制的,太多了程序会启动不了。 使用场景 如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例

ox2A19的专栏 2534

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2867

将3DMax编辑的动画,导入给已经绑定蒙皮好的模型给Unity使用

现在程序猿想做独立游戏,即容易,也难。 说容易,引擎越来越傻瓜化。 说难,到哪去找靠谱的美术? 好在伟大的AssetStore(还有淘宝上)有大批不赖的资源可以用。 现成的模型,是好,但是,没有配套的动作,却是一件让人头疼的事情,即使用IK动画,也不能完美的弥补这一缺陷。 虽然Unity具备 retargeting 功能,但是,也不是万能的,很多情况下,非标准的骨骼会导致

正经的时候都在打游戏 1万+

iOS的类方法和实例方法区别与使用 + -

1.什么是类方法? 在OC类定义方法时以 + 开头的方法,又称为静态方法。如:+ (viod)方法名{ }. 作用:不用实例话就可以直接调用的方法,一般是有返回值的,返回对应的实例(数组、字符串等),还有可能就是本身类的实例对象。常用于一些common或者UtiKit等公共方法类中。 调用:[类名 方法名】 限制: 不能使用自身属性 ,想要使用的类方法就要在定义类的.h文件中声明哟,否则不能直接调...

qq_40023759的博客 2707

五子棋AI实战:极大极小搜索、Alpha-Beta剪枝与禁手实现

博弈树搜索是双人零和博弈AI的经典决策框架,其核心思想是假设对手最优应对,通过递归遍历走法空间寻找最优解。极大极小搜索配合Alpha-Beta剪枝,能在不影响决策结果的前提下将搜索量降至平方根级别,大幅提升搜索效率。在五子棋场景中,还需处理黑棋禁手规则,包括双三、双四和长连判定,并将其融入搜索框架。评估函数基于棋型识别对局面打分,走法排序和迭代加深进一步优化剪枝效果。这些技术共同构成了一个可运行的五子棋AI,适用于棋类AI入门与博弈搜索实践。

weixin_29054399的博客 131

ios开发中类方法与self的注意点 与实例方法区别

ios开发中类方法与self的注意点 与实例方法区别.

sammyieveo的专栏 1071

台式机ubuntu系统屏幕无法调节的问题(已解决)(汇总)

背景:新配了一台主机,安装了双系统,windows下屏幕在带鱼屏上显示良好,但Ubuntu系统屏幕拉伸严重。 问题描述:系统没有适应屏幕被整个拉伸了,进入设置界面,显示Built-in Display,分辨率只有1024*768无法设置。 尝试一:网上最多的方法就是使用xrandr, 结果显示:xrandr:Failed to get size of gamma for output default 尝试二: 第一次进入命令行页面:login:填你的用户面 password:使用字母上方的数字键输入你的密码

weixin_45626706的博客 4625

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 912

IOS 类方法与实例方法的区别

类方法  +   ------class method ,相当于static方法。 实例方法 -  ---- instance method 实例方法一定要实例化以后才能调用 : NSObject * object1 = [[NSObject alloc] init]; 【object1  xxx实例方法];

jodan179的专栏 791

Java代码实现opc ua 事件订阅和数据变化订阅

OPC UA (Open Platform Communications Unified Architecture) 提供了两种主要的订阅机制:数据变化订阅(Data Change Subscription)和事件订阅(Event Subscription)。这两种订阅机制允许客户端实时接收来自服务器的数据更新或事件通知。

洛阳泰山的博客 2367

swift中实例方法和类方法的书写格式

其实swift中的实例方法和类方法的区分很简单,喜欢看源代码的,肯定一眼就看懂了。类方法的定义就是在实例方法前面加一个class修饰即可。还是附上一篇实例代码吧。 ViewController.swift中 // // ViewController.swift // 类方法和实例方法的定义 // // Created by mac on 16/2/6. //...

243

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

类方法和实例方法,类和元类

假设A类继承自B类,B类继承自NSObject A便是途中的Subclass(class),B便是图中的Superclass(class),NSObject便是Root class(class); A *a = [A new]; 其实A和a一样,也是对象,A称为类对象,a称为实例对象。 每一个类对象都有一个isa指针,指向元类。 我们新建一个NSObject的分类NSObject+Method我们在里面实现两个方法 - (void)sayObject{ NSLog(@"NSO.

卤海虾的专栏 383

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

黑马程序员——OC类方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、类方法概述            实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方 法前,你必须首先创建类的一个实例。         而类方法,比较起来,也就是说,不需要你创建一个实例。 +表示类方法,就是类调用方法,不依赖与任

Anne_lov的博客 475

黑马程序员-OC-类方法和对象方法的调用

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-1.类方法 声明:在.h文件中声明,必须以+开头。 实现:在.m文件中实现2.对象方法 声明:在.h文件中声明,必须以-开头。 实现:在.m文件中实现对比: 1)类方法只能类调用,对象方法只能对象调用 2)类方法与对象方法可以同名,因为调用身份不同 3)类方法不可以访问成员变量,对象方法

IOSway的博客 766

IOS类方法,实例方法

从昨天开始准备从Objective-C Programming:TheBigNerdRanchGuide这本书入手,从头扎实地学习一下OC,顺便提高一下英文阅读能力。 今天的知识重点在于类方法和实例方法的区别: NSDate *now = [NSDate date]; We say that the date method is a class method. That...

weixin_34296641的博客 87

python中对象的方法_python中的类方法、静态方法、对象方法

注:以下都是以公有为前提,私有方法只能在类内部调用,不需多讲。1、对象方法这种方法都有一个默认参数:self 这代表实例的这个对象def __init__(self):print("初始化对象")类是不能直接调用对象方法:class User(object):name = 'zs'def __init__(self):print("初始化对象")User.__init__()这样调用抛出一个错误...

weixin_28756281的博客 947

iOS---类方法(静态方法)和实例方法

类方法 实例方法是以+开头的方法, 实例方法是用实例对象访问; 类方法的对象是类而不是实例,通常用来创建对象或者工具类。 在实例方法里,根据继承原理发送消息给self和super其实都是发送给self 在类方法里面self是其他的类的类方法,在类方法中给self发送消息只能发给类方法self或者是类super 什么时候用类方法,要创...

weixin_33709590的博客 166

iOS的构造方法和实例方法的区分

1,概念 构造方法:指和类同名,用于构造对象(即生成对象)的方法; 实例方法:指的是在实例生成之后,实例调用的方法。 构造方法->构造实例;   实例产生->调用实例方法。 详细说来,就是类调用构造方法,来生成了一个实例,而这个实例产生了以后,才会调用实例方法来完成一些行为。2,两者之间的差异 行为差异:构造方法,创建对象后自动调用构造方法

1707

使用iOS APP的Build Configuration区分开发和生产环境

使用iOS APP的Build Configuration区分开发和生产环境 前两天看文章使用 Xcode 的 Target 区分开发和生产环境,感觉这个虽然是一种区分开发和生产环境比较强大的方法,但也有比较轻量级的,下面就分享下QDaily采用的配置Build Configuration方案。 区分测试环境和生产环境的上面的链接已经说了:区分统计数据、区分crash lo

sinat_34499916的博客 2474

ios 区分iphone ipod & ipad的方法及获取设备名称。

coding如何区分iphone ipod & ipad 的几种方法 1)使用  UI_USER_INTERFACE_IDIOM() 进行区分  (ios 3.2 >=)  无法区分iphone和ipod if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {        //     }

上善若水 2624

黑马程序员——OC—类方法及匿名类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——— 类方法及匿名类 1、类方法概述 实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。 而类方法,比较起来,也就是说,不需要你创建一个实例。 +表示类方法,就是类调用方法,不依赖于任何对象的方法。 -表示是实例(对象)方法,只能

liuming_xing_cool的博客 617

黑马程序员--OC基础--类方法、对象方法和self的使用

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-1、类方法(1)类方法就是一个方法,它的使用不需要用户去创建一个类的实例进行调用而可以直接通过类名对方法进行调用。 声明一个类方法的格式: +(返回值类型) 方法名:(参数1类型)参数1名称 方法名:(参数2类型)参数2名称; 例: +(double)sumOfNum1: (double)num1

qq_24842063的博客 410
上一篇: ios KSImageNamed-Xcode插件使用报错
下一篇: iOS OC消除黄色警告⚠️ (不断的更新中...)
xinxu-dev
博客等级 码龄12年 16粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值