为什么在使用Objective-C之前不需要初始化一些对象? 例如,为什么这是NSDate *today = [NSDate date];
合法?为什么在使用objective-c之前不需要初始化一些对象?
回答
它们在date
方法中初始化。这是在Objective-C中创建自动释放对象的常用方法。这种形式的分配者称为便利分配者。
要详细了解,请阅读苹果的可可核心能力文档中关于创建对象的“工厂方法”的段落:http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/ObjectCreation.html
要创造便利分配给你自己的类,实现一个类的方法,你的类的名字命名(没有前缀)。例如: -
@implementation MYThing
...
+ (id)thing
{
return [[[MYThing alloc] init] autorelease];
}
...
@end
我怎样才能知道什么时候可以用这种方式使用类?谢谢。 – lampShade 2011-05-13 13:19:10
基本上,您可以通过查看方法声明中的方法名称和“+”号找到方便的分配器。名称通常是没有前缀的类名,加号表示它是一个类方法。苹果公司为他们提供了许多课程。一些突出的例子:[NSString stringWithFormat:],[NSNumber numberWithInt:],... – 2011-05-13 13:26:48
约定是名称不以“alloc”,“new”,“copy”或“mutableCopy”开头的方法返回自动释放对象 – albertamg 2011-05-13 13:28:14
today
是静态日期调用内部初始化(和自动释放)。
您只需通过调用alloc
就您已分配的对象调用init…
方法。 alloc
只保留对象所需的空间,创建一个单元化的对象。
未初始化的对象将所有实例变量设置为零,零或等效类型。除了保留计数设置为1.
返回对象的所有其他方法都保证返回完全初始化的对象。 alloc
是例外。
您绝不可以对已经初始化的对象调用init…
方法。简单的规则是使用alloc
- init…
之间的1对1关系,就是这样。
两部分。
首先,正如其他人所提到的,一个方法可以在返回对象之前初始化并自动释放对象。这是部分这里发生了什么。
另一部分是它是如何定义的。请注意大多数Objective C定义是如何以-
开头的?你提到的那个没有。签名是这样的:
+ (NSDate*) date;
也就是说,这是一个类方法,适用于该类作为一个整体,而不是这个类的一个实例。
- 1. 需要初始化对象
- 2. 这些对象初始化之间有什么不同?
- 3. 为什么我需要初始化?
- 4. 为什么python在应用方法之前需要初始化列表?
- 5. 为什么不需要使用“新”来初始化std :: vector?
- 6. 为什么字符串需要用初始值初始化?
- 7. 什么时候需要在java中初始化一个对象,什么时候不需要?
- 8. 为什么使用as关键字初始化一个对象
- 9. 对象正在初始化为不需要的值
- 10. 为什么Swift中的类初始化期间不需要所有对象?
- 11. 为什么我需要初始化一个int变量为0?
- 12. 为什么在使用eval之前需要本地化$ @?
- 13. 为什么在使用new关键字初始化Float对象时,您不需要为f后缀1.0呢?
- 14. 初始化一个字符串,为什么需要`@`?
- 15. C# - 为什么我需要初始化一个[out]参数
- 16. 为什么统一初始化语法仅适用于对象?
- 17. 为什么不需要重新分配一些对象?
- 18. 为什么我不能用对象初始化这个NSArray?
- 19. 在C++初始化之前声明一个对象
- 20. 在if语句之前初始化一个对象
- 21. 为什么对象未被初始化全局使用Java?
- 22. 为什么使用double&not工作初始化对象方法?
- 23. 为什么初始化一个对象为空
- 24. 为什么不能使用String来初始化一个StringBuilder对象?
- 25. 为什么需要在堆上初始化一个对象而不是在堆栈上的指针?
- 26. NullReferenceException - 不知道为什么初始化对象重置为空
- 27. Swift:Constant''在被初始化之前使用
- 28. 为什么C++初始化列表在大括号之前?
- 29. 为什么抽象派生类需要初始化一个虚拟基类?
- 30. 为什么我需要初始化varible类时,我想用它
另请参阅这个最近的问题:http://stackoverflow.com/questions/5987969/objective-c-self-allocating-objects/5988016 – 2011-05-13 17:35:33