oc中new和alloc的区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuqingzhude/article/details/52053902

网上经典总结:
* new doesn’t support custom initializers (like initWithString)
—就是NSString *str = [[NSString new] initWithString:@”123”];这种写法不支持
* alloc-init is more explicit than new
—就是 alloc-init这种写法比new更准确,不推荐new写法,但是new便捷

备注:[XXX new] initwith xcode会有代码提示 但是运行会崩溃
reason:
* initialization method -initWithCharactersNoCopy:length:freeWhenDone: cannot be sent to an abstract object of class __NSCFConstantString: Create a concrete instance!’

网上深层解释:
[className new]基本等同于[[className alloc] init]. 区别只在于alloc分配内存的时候使用了zone,它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度.如果确实不需要用其他的init函数,比如initWithString, 只是使用 [Nsobject alloc] init] ,那用new的方法更加方便

展开阅读全文

没有更多推荐了,返回首页