我对编程和目标C都很陌生,我很难掌握一个关于分配,内存管理以及它们如何与实例变量相关联的概念。我为NSString创建了一个名为isUrl的类别,以测试字符串中“http://”的前缀。
从那里,我想在一个字符串上测试它。但是,鉴于这种情况,我无法弄清楚我是否应该: 1)使用@property声明一个新字符串作为实例变量来合成访问器 2)在我的实现中分配一个新字符串 3)设置我的变量并分配它
这些方法之间有什么区别?为什么我可能想要使用另一种方法? -
作为旁注,我正在处理O'Reilly的一本书,并试图在网上找到答案,但到目前为止并没有太多运气。我似乎找到了所有事情的例子,但我对它们如何使用或为何使用的解释更加困难。
1)
NSString* string = [[[NSString alloc]init]autorelease];
string = @“http://www.google.com”;
if ( [string isUrl]) {
NSLog(@"Caption is a URL");
NSLog(@"URL %@",string);
string = nil;2)
NSString* string = @"http://www.googl.com";
[string retain];
if ( [string isUrl]) {
NSLog(@"Caption is a URL");
NSLog(@"URL %@",string);
string = nil;3)像这样...... ....
@synthesize string;
string.name = "http://www.google.com";
if ( [string.name isUrl]) {
NSLog(@"Caption is a URL");
NSLog(@"URL %@",string);
string = nil;
答案 0 :(得分:0)
不需要释放或保留字符串文字。
只要与对象关联的值需要在单个函数调用之外存在,并且您不需要在10.4或更早版本下编译程序,就应该使用属性。通过使用nil
,您似乎不需要保持字符串,因此您应该只使用局部变量。这就是局部变量的用途。
NSString* string = @"http://www.google.com";
if ( [string isUrl]) {
NSLog(@"Caption is a URL");
NSLog(@"URL %@",string);
}
Apple的Objective-C memory management rules非常简单。实际上只有一条规则,有几个推论。
NSString* string = [[[NSString alloc]init]autorelease]; string = @"http://www.google.com";
在将不同对象分配给同一变量之前,不需要分配对象。第一个对象将被解除分配并且没有用处。
string.name = "http://www.google.com";
“”表示C字符串。对于NSString,您必须使用at符号。以上应该是
string.name = @"http://www.google.com";