这两种在Objective-C中分配内存的方法有什么区别?

Aje*_*rya 1 iphone memory-management objective-c ios

我对在Objective-C中分配内存的正确方法感到困惑.假设我有一个NSMutableDictionary.我可以通过两种方式初始化它:

   NSMutableDictionary *alpha = [[NSMutableDictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)

要么

   NSMutableDictionary *alpha = [NSMutableDictionary dictionary];
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别?我知道第一个为alpha分配内存,但第二个呢?

建议将哪一项作为分配内存的最佳做法?

Can*_*der 5

[NSMutableDictionary dictionary];
Run Code Online (Sandbox Code Playgroud)

与以下内容完全相同:

[[[NSMutableDictionary alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

它只是为您节省一些打字.只要您知道保留对象和自动释放对象之间的区别,您使用哪一个并不重要.如果您使用ARC,那么您甚至不需要知道.

惯例是:

  1. 如果你看到init,newcopy:它是一个保留的对象.
  2. 如果方法名称以类名开头(没有框架前缀),则它是一个自动释放的对象.