字符串分配和实例变量

时间:2011-03-20 17:46:48

标签: objective-c

我对编程和目标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;

1 个答案:

答案 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";