Par*_*oft 3 iphone xcode function objective-c nsstring
我想在Objective-C中定义以下函数.我提供了伪代码来帮助说明我正在尝试做什么.
伪代码:
function Foo(param) {
string temp;
if(param == 1) then
temp = "x";
else if(param == 2) then
temp = "y";
else if(param == 3) then
temp = "z";
else
temp = "default";
end if
return temp;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果我这样做...我分配给它的变量导致"BAD Access"错误.
我不知道之间有什么区别:
static NSstring *xx;
Run Code Online (Sandbox Code Playgroud)
或非静态的:
NSString *xx;
Run Code Online (Sandbox Code Playgroud)
声明是,以及如何或为什么我想要使用一个而不是另一个.
我也不完全理解NSString的初始化器,以及它们之间的区别.例如:
[[NSString alloc] initWithString:@"etc etc" ];
Run Code Online (Sandbox Code Playgroud)
或简单的任务:
var = @""
Run Code Online (Sandbox Code Playgroud)
甚至:
var = [NSString stringWithString:@"etc etc"];
Run Code Online (Sandbox Code Playgroud)
你可以帮我一把吗?
到目前为止,使用从上面列出的函数返回的NSString值总是会导致错误.
你可以这样做:
- (NSString *)functionName:(int)param {
NSString *result = nil;
switch (param) {
case 1:
result = [NSString stringWithString:@"x"];
break;
case 2:
result = [NSString stringWithString:@"y"];
break;
case 3:
result = [NSString stringWithString:@"z"];
break;
default:
result = [NSString stringWithString:@"defaultv"];
break;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
static NSstring *xx;
Run Code Online (Sandbox Code Playgroud)
这声明了一个静态分配的变量,就像在C中一样.
NSstring *xx;
Run Code Online (Sandbox Code Playgroud)
在声明普通本地堆栈变量的方法内部,就像在C中一样.
正如您应该知道的那样,两者之间的区别在于第一个将在函数的调用之间保持其值(如果从多个线程调用该函数,则会导致问题).
[[NSString alloc] initWithString:@"etc etc"]
Run Code Online (Sandbox Code Playgroud)
这将创建一个带有内容的新NSString对象etc etc.这可能与程序中具有相同内容的任何其他NSString对象相同,也可能不同,但您不必关心.内存管理明智,你拥有它,所以你有责任确保你最终打电话release或autorelease在它上面,以避免泄漏内存.
@"etc etc"
[NSString stringWithString:@"etc etc"]
Run Code Online (Sandbox Code Playgroud)
那些基本相同.两者都为您提供了包含内容的NSString对象etc etc.这可能与程序中具有相同内容的任何其他NSString对象相同,也可能不同,但您不必关心.内存管理明智,你不拥有它,所以除非你先通过调用取得所有权,否则你不能调用release或者autorelease在对象上retain.此外,由于您不拥有它,您可以在方法中使用它,将其作为参数传递给其他方法,甚至将其用作方法的返回值,但您不能将其存储在ivar或静态变量中没有通过打电话retain或复制(带copy)获得所有权.
另外,请注意""并且@""非常不同.第一个给出了const char *与C完全相同的内容,而第二个给出了NSString对象.如果您使用代码期望NSString对象的位置,您的程序将崩溃const char *.
| 归档时间: |
|
| 查看次数: |
24792 次 |
| 最近记录: |