我是 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] 时, 为什么它不能运行?
- 分配时是否会导致内存泄漏 没有解除分配?
- 在哪里可以找到基本教程,例如 这是在互联网上吗?
提前致谢
最佳答案
Do I always need to alloc new NSString to change its value from integer ?
一般来说是的;但是,有比使用 alloc
和 init
更方便的方法来创建字符串(以及许多其他类型的对象)(请参阅下面的自动释放池)
您可以将任何 Objective-C 对象类型传递给 addItemWithObjectValue:
,包括 NSString
和 NSNumber
对象。这两个类都有许多方便的类方法,您可以使用它们来创建新实例,例如:
for (int i = 0; i < 24; ++i)
{
[comboHour addItemWithObjectValue:[NSNumber numberWithInt:i]];
}
When I uncomment [mystr dealloc], why it won't run ?
永远不要调用dealloc
。请改用 release
。
Cocoa 对象是引用计数的,就像 Delphi 中的 COM 对象一样。与 COM 一样,当您使用完一个对象时,您可以调用release
。当对象不再有引用时,它会自动释放。
与 COM 不同,Cocoa 具有“自动释放池”,例如,它允许您创建一个新的 NSString 实例,而不必担心对其调用 release
。
例如:[NSString stringWithFormat:@"%d", 123]
创建一个“自动释放”字符串实例。完成后您不必释放
它。对于返回对象的所有方法都是如此,除了 new
和 init
方法。
Does it cause memory leak to alloc without dealloc ?
是的,除非您使用垃圾收集。
Where can I find basic tutorial like this on internet ?
关于cocoa - 这是向 Cocoa 中的 NSCombobox 添加项目的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973179/