我可以构建一个UIImageView
对象与myImageView = [[UIImageView alloc] initWithImage:image];
如果我想更改 UIImageView 上的图像,则影响显示的应用程序活动如下。我可以通过重新分配它来做到这一点myImageView.image = someNewImage
。然而,这似乎并没有更新框架尺寸。我可以手动修改它们,但我在实践中观察到调用[myImageView initWithImage:someNewImage]
为我做到这一点,并且具有更简洁的优点。
但是我不确定多次调用是否正式违反 Objective C 中的协议init由单个对象构造的方法alloc。除非它是安全的(保证不会崩溃或导致泄漏),否则我不会使用它。有证据表明它不安全吗?
到目前为止我的研究...
本文提供了有关对象上“alloc”和“init”的一般详细信息
http://developer.apple.com/library/mac/documentation/cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html http://developer.apple.com/library/mac/documentation/cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html
这是相关的SO问题
为什么 Objective-C 中 alloc 和 init 是分开调用的? https://stackoverflow.com/questions/1385410/why-are-alloc-and-init-called-separately-in-objective-c
这篇博客文章警告供应商由于初始化过程的影响,对象的 init 方法可能会被多次调用。
http://www.friday.com/bbum/2009/09/06/iniailize-can-be-execulated-multiple-times-load-not-so-much/ http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/
No.
-init
是假设它只被调用一次而编写的。例如,-initWithImage
您引用的苹果文档中引用的实现是
- (id)initWithImage:(NSImage *)anImage {
...
if (self) {
image = [anImage retain];
}
return self;
}
这假设 ivarimage
不指向保留的对象。如果调用两次,就会泄漏image
.
Call -init...
每个仅一次alloc
,并致电-init...
之后立马alloc
像往常一样将它们组合起来:
SomeClass* foo=[[SomeClass alloc] init...: ... ];
你永远不应该将它们分开,因为[anAllocedObject init...]
可能会返回与以下内容不同的内容anAllocedObject
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)