Iphone 什么时候需要分配课程?
在我的节目里我有Iphone 什么时候需要分配课程?,iphone,objective-c,class,memory-management,Iphone,Objective C,Class,Memory Management,在我的节目里我有 NSString *stringOne = [NSString stringWithFormat:@"Hello World"]; [variable insertText:stringOne]; 代码运行良好。我知道“stringWithFormat:”方法启动对象,但是alloc发生在哪里?为什么这里不需要它 我可以用NSSound做同样的事情 NSSound *favoriteSong = [NSSound soundNamed:@"Friday"]; [favorit
NSString *stringOne = [NSString stringWithFormat:@"Hello World"];
[variable insertText:stringOne];
代码运行良好。我知道“stringWithFormat:”方法启动对象,但是alloc发生在哪里?为什么这里不需要它
我可以用NSSound做同样的事情
NSSound *favoriteSong = [NSSound soundNamed:@"Friday"];
[favoriteSong play];
这也将运行。我知道'soundNamed:'返回并启动对象,但从未分配NSSound
我一直认为我必须做以下事情
NSSound *favoriteSong = [[NSSound alloc]initWithBlablanla];
然后从那里继续下去,以便一切顺利
我想问的是,分配发生在哪里
什么时候需要分配课程
您不应该过多地处理类对象,它们都是自动完成的。我真的认为我们谈论的不是同一件事。也许你指的是“类方法返回的对象”,而不是“类”。比如:
什么时候需要分配类方法返回的对象?
看起来更合适
alloc发生在哪里
你回答了,就在这些话之前。它发生在+stringWithFormat:
方法内部
为什么这里不需要它
在你这边不需要它,因为在图书馆那边已经做过了
我知道'soundNamed:'返回并启动对象,但从未分配NSSound
当然是。如果存在,则已分配*。同样,它是在+soundNamed:
方法中分配的
*至少在正常情况下。也许有人可以举个例子。一些方法,如
soundNamed
分配一个自动释放的对象并返回它。作为一个例子,让我们想象这两种方法的存在:
电话:
NSSound *favoriteSong = [NSSound soundNamed:@"Friday"];
NSSound *favoriteSong = [[NSSound alloc] initWithSoundNamed:@"Friday"];
返回NSSound分配的对象,以@“Friday”初始化。此返回的对象将自动删除
电话:
NSSound *favoriteSong = [NSSound soundNamed:@"Friday"];
NSSound *favoriteSong = [[NSSound alloc] initWithSoundNamed:@"Friday"];
返回NSSound分配的对象,以@“Friday”初始化。此返回的对象将被保留,并且必须解除分配
这两个电话会做同样的事情:
NSSound *favoriteSong = [NSSound soundNamed:@"Friday"];
NSSound *favoriteSong = [[[NSSound alloc] initWithSoundNamed:@"Friday"] autorelease];
作为快捷方式,soundNamed类似于:
+ (id) soundNamed:(NSString*)name
{
NSSound* aSound = [[NSSound alloc] initWithSoundNamed:name];
if (!aSound) return nil;
return [aSound autorelease];
}
stringWithFormat
是一个声明为:
+ (id)stringWithFormat:(NSString *)format, ...
请注意字体中的“+”表示类方法。文件规定:
返回使用给定格式字符串作为模板创建的字符串,其余参数值将被替换到该模板中
但即使这不是必须的,人们也可以正确地写下:
[variable insertText:@"Hello World"];
关于Objective-C可能值得一读。这些方法被称为便利(class)方法,它们返回一个自动释放的对象。换句话说,
stringWithFormat
实现中的某个地方类似于
NSString * string = [[[NSString alloc] init] autorelease];
基本上,
stringWithFormat
分配对象,将其放入自动释放池并返回给您。您可以找到NSString的GNUStep实现系统负责分配类
——您几乎不需要担心这一点。然而,实例
完全是另一回事。非常感谢。你的答案是最好的。。非常感谢你的兄弟。非常感谢。