首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InitWith方法与工厂方法

InitWith方法与工厂方法
EN

Stack Overflow用户
提问于 2010-07-18 08:42:31
回答 3查看 2K关注 0票数 6

我选择了ObjC和Cocoa,这也是我第一次正式涉足编程领域。

我遇到了在实例上调用的initWith方法和在类上调用的工厂方法之间的区别。

首先,为什么它们被称为“工厂”方法,对于我所称的"InitWith“方法,是否有一个合适的术语?

其次,功能上的区别是什么?只是内存管理方面的问题(工厂方法返回一个自动释放的对象)?

例如,[NSString stringWithString: (NSString*)aString][[NSString alloc] initWithString: (NSString*)aString]之间的真正区别是什么

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-18 17:05:55

在Cocoa的object ownership policy中描述了这两种方法之间的区别。您拥有从-initWithString:返回的对象,因此必须释放它,但是您不拥有从+stringWithString返回的对象,因此不需要释放它(此外,如果您确实想要获得它的所有权,则必须保留它)。

工厂方法之所以被称为工厂方法,是因为它们会为您返回一个已经创建的对象,通常带有您提供的用于配置对象的参数,以方便程序员。

票数 5
EN

Stack Overflow用户

发布于 2010-07-18 09:03:12

在您的示例中

代码语言:javascript
复制
 [[NSString alloc] initwithString: (NSString     
*)aString];

当您执行分配时,您在内存中为字符串放置了一个空间,因此是分配。然后告诉它使用等于aString的字符串进行初始化。(NSString *)是对象类型的标识符,所以您告诉它aString被声明为NSString。

我通常会做这样的事情

代码语言:javascript
复制
   NSString * aString = @"String value";

声明aString等于什么。

如果您将某些内容分配到内存中以对其进行管理,则需要在正确的时间释放它,例如

代码语言:javascript
复制
   -(void) dealloc {} 

部分的代码。

关于NSString的一切都可以在苹果NSString的文档中得到解释

票数 0
EN

Stack Overflow用户

发布于 2010-07-18 09:11:27

主要区别在于

代码语言:javascript
复制
 [NSString stringWithString:
  (NSString*)aString] 

返回一个自动释放的字符串,您无需担心其内存管理,而

代码语言:javascript
复制
    [[NSString alloc] initWithString: 
     (NSString*)aString]

返回一个由您负责释放的字符串。基本上,前者是后者的捷径,外加自动释放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3273857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档