我是 Delphi 程序员,对 Cocoa 很陌生。
起初我尝试了这个:
-(void)awakeFromNib
{
int i;
NSString *mystr;
for (i=1;i<=24;i++)
{
[comboHour addItemWithObjectValue:i];
}
}
但这没有用。然后我尝试在谷歌上搜索但没有成功。
经过大约 30 分钟的实验,我得到了这个:
-(void)awakeFromNib
{
int i;
NSString *mystr;
for (i=1;i<=24;i++)
{
mystr = [[NSString alloc]initWithFormat:@"%d",i];
[comboHour addItemWithObjectValue:mystr];
//[mystr dealloc];
}
}
我的问题是:
- 这是正确的方法吗?
- 我是否总是需要分配新的
NSString 更改其值
整数 ?
- 当我取消注释 [mystr dealloc] 时,
为什么它不会运行?
- 分配时是否会导致内存泄漏
没有解除分配?
- 我在哪里可以找到基本教程,例如
这个在互联网上吗?
提前致谢
我是否总是需要分配新的 NSString 来更改其值 integer ?
一般来说是的;但是,有比使用更方便的方法来创建字符串(以及许多其他类型的对象)alloc
and init
(参见下面的自动释放池)
您可以将任何 Objective-C 对象类型传递给addItemWithObjectValue:
, 包括NSString
and NSNumber
对象。这两个类都有许多方便的类方法,您可以使用它们来创建新实例,例如:
for (int i = 0; i < 24; ++i)
{
[comboHour addItemWithObjectValue:[NSNumber numberWithInt:i]];
}
当我取消注释 [mystr dealloc] 时,为什么它不会运行?
从不打电话dealloc
. Use release
反而。
Cocoa 对象是引用计数的,就像 Delphi 中的 COM 对象一样。像COM一样,你调用release
当你完成一个物体时。当一个对象不再有引用时,它会自动释放。
与 COM 不同,Cocoa 有“自动释放池”,例如,它允许您创建一个新的 NSString 实例,而不必担心调用release
on it.
例如:[NSString stringWithFormat:@"%d", 123]
创建一个“自动释放”字符串实例。你不必release
完成后即可。对于所有返回对象的方法都是如此,除了new
and init
方法。
没有dealloc就alloc会导致内存泄漏吗?
是的,除非您使用垃圾收集。
在互联网上哪里可以找到这样的基本教程?
See 实用内存管理 http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)