网上关于 写一个NSString类的实现 是这样的,我觉得这样实现不好

endfun 2015-02-15 05:37:55
+ (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;


+ (id) stringWithCString: (const char*)nullTerminatedCString
encoding: (NSStringEncoding)encoding
{
NSString *obj;


obj = [self allocWithZone: NSDefaultMallocZone()];
obj = [obj initWithCString: nullTerminatedCString encoding: encoding];
return AUTORELEASE(obj);
}


网上关于 写一个NSString类的实现 是这样的,我觉得这样实现不好,能给出一种ARC下的实行方式吗?
...全文
542 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
AUTORELEASE哪里有这个宏呢
ReyZhang 2015-02-16
  • 打赏
  • 举报
回复
它那个AUTORELEASE宏内部应该判断了运行设备是否支持ARC的情况,如果支持不做处理,如果不支持给对象发送autorelease消息
Bannings 2015-02-16
  • 打赏
  • 举报
回复
这个实现代码里之所以会用到这个宏:AUTORELEASE,就是因为它适配了ARC,如果是ARC的话,这个宏就什么都不会做,反之则调用autorelease
ReyZhang 2015-02-16
  • 打赏
  • 举报
回复
ARC下就交由编译器来进行内存管理,所以你可以直接这样来创建一个字符串
NSString *str = [[NSString alloc] initWithCString: nullTerminatedCString encoding: encoding];
ReyZhang 2015-02-16
  • 打赏
  • 举报
回复
引用 4 楼 endfun 的回复:
[quote=引用 3 楼 zhanglei5415 的回复:] 它那个AUTORELEASE宏内部应该判断了运行设备是否支持ARC的情况,如果支持不做处理,如果不支持给对象发送autorelease消息
谢谢zhanglei5415和zhanglei5415 我前面说到的问题和答案 我是在这里看到的,http://blog.csdn.net/dayuqi/article/details/8101099 但是我真的看不懂,题目是: 写一个NSString类的实现,但是答案却是 stringWithCString 方法的实现, 这个答案是不是牛头不对马嘴? 如果真有这样一道题,那该如何答呢?[/quote] 那道题主要考察的是NSString的创建及如何使用类方法构造一个便捷的创建NSString对象的工厂方法。根据要求,参数是一个C字符,而在oc中根据C字符来创建NSString的就只有stringWithCString这个系统提供的函数。
endfun 2015-02-16
  • 打赏
  • 举报
回复
谢谢zhanglei5415和zhangao0086,刚才拷贝名字时没有拷贝下来,结果ctrl v两次了,搞重复了,更正下。
endfun 2015-02-16
  • 打赏
  • 举报
回复
引用 3 楼 zhanglei5415 的回复:
它那个AUTORELEASE宏内部应该判断了运行设备是否支持ARC的情况,如果支持不做处理,如果不支持给对象发送autorelease消息
谢谢zhanglei5415和zhanglei5415 我前面说到的问题和答案 我是在这里看到的,http://blog.csdn.net/dayuqi/article/details/8101099 但是我真的看不懂,题目是: 写一个NSString类的实现,但是答案却是 stringWithCString 方法的实现, 这个答案是不是牛头不对马嘴? 如果真有这样一道题,那该如何答呢?

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧