关于objective-c类方法与实例方法的一些疑问

 最爱一片小舟 发布于 2022-10-26 17:13

之前都是在搞前端js
之后写ios开始慢慢接触objective-c
有个疑问

//实例方法调用
NSString *str1 = [[NSString alloc] initWithString:@"123123"];

//类方法调用
NSString *str2 = [NSString stringWithString@"123123"];

我的疑问可能用上面例子会不太能凸显出来
疑问在于,
实例方法必须创建一个实例后使用实例进行调用
也就是内存中必存在一个实例
如果我想不通过实例来达到某些操作
那在设计API时可以设计成类方法,这样就可以直接通过类名进行调用
但是这种情况难道就不会生成实例在内存中了吗??
或者说,虽然没有生成实例,但内存依然会分配空间
那如果

[XXXClass abc];
[XXXClass bcd];
[XXXClass cde];
[XXXClass def];

这种情况下,内存会分配多少块内存空间呢?
而但代码域(如方法内)结束后,内存空间又是否能正常释放呢?

2 个回答
  • 按住ctrl点NSString进去看。

    - (instancetype)initWithString:(NSString *)aString;
    + (instancetype)stringWithString:(NSString *)string;
    

    看这两个方法的前面,一个是“-”一个是“+”
    在oc里面,如果用加号申明一个方法的话,是不需要实例化就可以调用这个类的方法。
    如果用减号申明一个方法,那么需要先alloc实例化一个对象才能对这个类里的方法进行调用。

    2022-10-27 01:04 回答
  • 你给的例子中,不管是对象方法还是类方法,它们的目的都是要得到一个对象实例。
    不首先分配内存空间,拿什么去配置你的对象呢。
    说不定类方法里面是这么实现的:

    + (instancetype)stringWithString:(NSString *)string {
        NSString *str = [[self alloc]initWithString:string];
        return str;
    }
    2022-10-27 01:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有