fuz*_*oat 7 cocoa coding-style objective-c
这有效 - 它确实可以编译 - 但我只是想检查它是否被认为是好的做法还是要避免的事情?
NSString *fileName = @"image";
fileName = [fileName stringByAppendingString:@".png"];
NSLog(@"TEST : %@", fileName);
OUTPUT: TEST : image.png
Run Code Online (Sandbox Code Playgroud)
可以用一个临时变量写得更好:
NSString *fileName = @"image";
NSString *tempName;
tempName = [fileName stringByAppendingString:@".png"];
NSLog(@"TEST : %@", tempName);
Run Code Online (Sandbox Code Playgroud)
只是好奇.
Mat*_*her 12
在内部,编译器通常会将代码分解为一个名为"单静态分配"的表示,其中给定变量只分配一个值,所有语句尽可能简单(复合元素分成不同的行).你的第二个例子遵循这种方法.
程序员有时会这样写.它被认为是编写代码最清晰的方式,因为你可以将所有语句都写成基本元组:A = B运算符C.但对于"显而易见"的代码,它通常被认为太冗长,所以它是一种不常见的风格(在情境之外)在那里你试图让非常神秘的代码易于理解).
一般来说,程序员不会对你的第一个例子感到困惑,如果你不再需要原件,那么它被认为是可以接受的fileName.但是,许多Obj-C程序员鼓励以下风格:
NSString *fileName = [@"image" stringByAppendingString:@".png"];
NSLog(@"TEST : %@", fileName);
Run Code Online (Sandbox Code Playgroud)
或者甚至(取决于生产线上的水平空间):
NSLog(@"TEST : %@", [@"image" stringByAppendingString:@".png"]);
Run Code Online (Sandbox Code Playgroud)
即如果你只使用一次变量,不要命名它(只需使用它).
但是,在风格上,如果您遵循单静态分配方法,则不应将其tempName用作变量名称,因为它不能解释变量的作用 - 您可以使用类似的东西fileNameWithExtension.从更广泛的意义上讲,我通常避免使用"temp"作为前缀,因为它太容易开始命名所有"temp"(所有局部变量都是临时的,所以它没什么意义).
第一行是声明NSString文字.它具有持续过程生命周期的存储,因此不需要释放.
对stringByAppendingString的调用返回一个自动释放的NSString.这也不应该被释放,但会持续到下一个自动释放池排放.因此,在这种情况下,将stringByAppendingString调用的结果分配回fileName指针是完全正确的.但是,一般情况下,您应该检查对象生命周期是什么,并相应地处理它们(例如,如果fileName已被声明为您拥有内存的字符串,则需要释放它,因此需要使用临时值) .
要检查的另一件事是,如果您在此片段之后使用fileName执行任何操作 - 例如在实例变量中保留它 - 在这种情况下您需要保留它.
| 归档时间: |
|
| 查看次数: |
19879 次 |
| 最近记录: |