2011-03-20 190 views
0

我对编程和目标C很陌生,我很难理解关于分配,内存管理以及它们如何与实例变量配合的概念。我为NSString创建了一个名为isUrl的类别,用于测试字符串中“http://”的前缀。字符串分配和实例变量

从那里我想测试一个字符串,但是,鉴于这种情况我无法弄清楚我是否应该: 1)声明一个新的字符串与@财产实例变量合成存取 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

字符串常量不需要被释放或保留。

只要与对象关联的值需要存在于单个函数调用之外并且不需要程序在10.4或更低版本下编译,就应该使用属性。通过使用nil,看起来你不需要字符串来保存,所以你应该只使用局部变量。这就是局部变量的用途。

NSString* string = @"http://www.google.com"; 
if ([string isUrl]) { 
    NSLog(@"Caption is a URL"); 
    NSLog(@"URL %@",string); 
} 

苹果的Objective-C memory management rules很简单。实际上只有一条规则,有几个推论。


​​

你并不需要分配不同的对象相同的变量之前分配的对象。第一个对象将被简单地释放并且没有任何用途。

string.name = "http://www.google.com"; 

“” 表示C字符串。对于NSString,你必须使用at符号。以上应该是

string.name = @"http://www.google.com";