实例和类方法之间的混淆

时间:2013-09-24 20:06:00

标签: objective-c

不确定是否使用类方法或实例方法来创建NSarray ....我的意思是有很多方法可以创建它们...... 对不起ios开发新手。

3 个答案:

答案 0 :(得分:4)

如果您使用ARC,则没有区别。例如,这两行返回相同的内容:

[[NSArray alloc] initWithObject:myObject];

[NSArray arrayWithObject:myObject];

唯一的区别是后者返回一个自动释放的对象,如果使用ARC,则必须以与另一个对象相同的方式处理。如果没有,您应该将retain添加到第二行代码,以防您想要返回对象的所有权。

答案 1 :(得分:0)

您可以使用任何编程语言创建NSArray或字符串,即分配内存 - >将实例变量初始化为您想要的某个状态。

你可以为例如..

创建数组

NSArray * myArray = [[NSArray alloc] init];

现在你也可以使用其他类方法,让我们以NSString为例。 NSString * myString = [NSString stringwithformat:@“%@ - 这是我的字符串 - %@”,@“< - ”,@“ - >”];

现在使用ARC,它没有什么区别,因为ARC将负责释放创建的对象,因为类方法通常是自动释放的。

答案 2 :(得分:0)

基本上有三种方法可以获得,例如NSArray:

  1. 标准的alloc / init。从概念上讲,至少[NSArray alloc]是对NSArray的类方法的调用,然后生成的对象为init..步调用一种特殊形式的实例方法。
  2. [NSArray arrayWithSomethingOrAnother..]。这将在NSAArray上调用一个类方法,该方法在内部执行alloc / init(带有一些扭曲),然后根据需要“填充”对象。
  3. [someObject arrayByDoingSomething..]。这是一个返回NSArray的某个对象(可能是也可能不是NSArray对象)的实例方法。
  4. 实际上并没有太多的情况,(2)和(3)之间存在重叠 - 不能想到NSArray的任何副作用,尽管有类似的NSString函数。尽管纯粹主义者可能更喜欢旧的alloc / init与arrayWith...类方法,但实际上并不需要在ARC环境中对NSArray使用alloc / init(尽管它仍然在手动引用计数环境中占有一席之地) )。