【发布时间】:2011-09-11 04:12:19
【问题描述】:
我有 2 个新问题:
1) 考虑这一行:
NSString *myString = [[NSString alloc] initWithString: @"Value"];
我学到了两件事,但我想确认一下: 据我所知,“alloc”消息表明 NSString 的实例将存储在“堆”内存中。 我还了解诸如“字符”之类的原始变量存储在“堆栈”内存中。
这是否意味着:
- NSString 的实例存储在堆内存中;
- 并且该对象有一个 iVar 指针(当调用 initWithString 方法时)指向驻留在堆栈内存中的原始“chars”的“Value”字符串? 这在实际中是如何工作的?
第二个问题直接相关,并导致我陷入个人困境(可能是因为我错过了一点): 2)您会咨询这两种方法中的哪一种,为什么?:
NSString *myString = [[NSString alloc] initWithString: @"Value"];
NSString *myString = @"Value";
如果我的第一个问题得到确认,那么这两种方法都应该“最终”指向存储在堆栈内存中的字符。因此,我实际上并没有看到使用第一个选项的目的并被保留计数所困扰。
【问题讨论】:
标签: objective-c memory nsstring theory