Jon*_*Wei 11 xcode cocoa cocoa-touch objective-c nsstring
有什么区别:
NSString *string1 = @"This is string 1.";
Run Code Online (Sandbox Code Playgroud)
和
NSString *string2 = [[NSString alloc]initWithString:@"This is string 2.];
Run Code Online (Sandbox Code Playgroud)
为什么我不分配和初始化第一个字符串,但它仍然有效?我以为我应该分配NSString,因为它是一个对象?
在Cocoa Touch,
-(IBAction) clicked: (id)sender{
NSString *titleOfButton = [sender titleForState:UIControlStateNormal];
NSString *newLabelText = [[NSString alloc]initWithFormat:@"%@", titleOfButton];
labelsText.text=newLabelText;
[newLabelText release];
}
Run Code Online (Sandbox Code Playgroud)
为什么我不为titleOfButton字符串分配和初始化?我打电话的方法是否适合我?
另外,我正在使用XCode 4,但我不喜欢iOS 5等等,所以如果重要的话我不会使用ARC.请不要说我应该,我只是在这里找出为什么会这样.谢谢!
Ale*_*lds 13
变量string1是一个NSString 字符串文字.编译器在可执行文件中为它分配空间.它被加载到内存中并在程序运行时进行初始化.只要应用程序运行,它就会存在.你不需要retain或release它.
变量的生命周期string2与您指定的一样长,直到您release最后一次引用为止.你为它分配空间,所以你负责清理它.
变量titleOfButton的寿命是方法的生命-clicked:.那是因为该方法-titleForState:返回autorelease-d NSString.一旦离开方法的范围,该字符串将自动释放.
你不需要创建newLabelText.这一步是多余和混乱的.只需将labelsText.text属性设置为titleOfButton:
labelsText.text = titleOfButton;
Run Code Online (Sandbox Code Playgroud)
为什么使用属性?因为设置此retain属性会将引用计数增加titleOfButton一(这就是它被称为retain属性的原因),因此指向的字符串titleOfButton将超过结尾-clicked:.
考虑retain在这个例子中使用的另一种方法labelsText.text是对所指向的字符串"取得所有权" titleOfButton.该字符串现在将持续与labelsText生命一样长(除非某些其他变量也取得字符串的所有权).
| 归档时间: |
|
| 查看次数: |
11916 次 |
| 最近记录: |