为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2019-04-21 20:41:43
之前都是在搞前端js之后写ios开始慢慢接触objective-c有个疑问//实例方法调用NSString*str1=[[NSStringalloc]initWithString:@"123123"];//类方法调用NSString*str2=[NSStringstringWithString@"123123"];我的疑问可能用上面例子会不太能凸显出来疑问在于,实例方法必须创建一个实例后使用实例进行调用也就是内存中必存在一个实例如果我想不通过实例来达到某些操作那在设计API时可以设计成类方法,这样就可以直接通过类名进行调用但是这种情况难道就不会生成实例在内存中了吗??或者说,虽然没有生成实例,但内存依然会分配空间那如果[XXXClassabc];[XXXClassbcd];[XXXClasscde];[XXXClassdef];这种情况下,内存会分配多少块内存空间呢?而但代码域(如方法内)结束后,内存空间又是否能正常释放呢?
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

你给的例子中,不管是对象方法还是类方法,它们的目的都是要得到一个对象实例。不首先分配内存空间,拿什么去配置你的对象呢。说不定类方法里面是这么实现的:
+(instancetype)stringWithString:(NSString*)string{
NSString*str=[[selfalloc]initWithString:string];
returnstr;
}
                            
查看完整回答
反对 回复 2019-04-21
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

按住ctrl点NSString进去看。
-(instancetype)initWithString:(NSString*)aString;
+(instancetype)stringWithString:(NSString*)string;
看这两个方法的前面,一个是“-”一个是“+”
在oc里面,如果用加号申明一个方法的话,是不需要实例化就可以调用这个类的方法。
如果用减号申明一个方法,那么需要先alloc实例化一个对象才能对这个类里的方法进行调用。
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信