Objective c 返回mutable,其中返回值应该是不可变的
我找到了这个密码Objective c 返回mutable,其中返回值应该是不可变的,objective-c,cocoa,Objective C,Cocoa,我找到了这个密码 -(NSString *) genRandStringLength: (int) len { NSMutableString *randomString = [NSMutableString stringWithCapacity: len]; for (int i=0; i<len; i++) { [randomString appendFormat: @"%C", [letters characterAtIndex: arc4ran
-(NSString *) genRandStringLength: (int) len {
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
return randomString;
}
或
你可以做:-
-(NSString *) genRandStringLength: (int) len
{
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
NSString *immutableString = [NSString stringWithString:randomString];
//OR
NSString *immutableString = (NSString *)randomString;
return immutableString;
}
-(NSString*)genRandStringLength:(int)len
{
NSMutableString*randomString=[NSMutableString stringWithCapacity:len];
对于(int i=0;i您可以执行以下操作:-
-(NSString *) genRandStringLength: (int) len
{
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
NSString *immutableString = [NSString stringWithString:randomString];
//OR
NSString *immutableString = (NSString *)randomString;
return immutableString;
}
-(NSString*)genRandStringLength:(int)len
{
NSMutableString*randomString=[NSMutableString stringWithCapacity:len];
对于(int i=0;i从技术上讲,返回NSMutableString
而不是NSString
是没有问题的。因为前者是后者的子类,NSMutableString
实例支持NSString
所做的一切。例如,如果您查看Cocoa,您会注意到许多alloc/init方法都返回要创建的类的子类的实例
在您的特定情况下,如果该方法返回一个可变字符串,我认为没有问题,因为该字符串是在该方法中本地创建的,并且没有在类中的其他位置使用
通常,如果这些对象是返回它们的类的IVAR/属性,则可能应该避免返回可变对象。如果这样做,则方法的调用方可能会发现返回的对象是可变的,然后更改其内容,而无需将更改通知对象的“拥有者”实例
还请注意,如果要返回不可变对象,return[randomString copy];
仅在ARC和垃圾收集下正确。使用手动内存管理,它应该是return[[randomString copy]autorelease];
或return[NSString stringWithString:randomString]从技术上讲,返回一个NSMutableString
而不是NSString
是没有问题的。因为前者是后者的一个子类,NSMutableString
实例支持NSString
所做的一切。例如,如果您查看Cocoa,您会注意到许多alloc/init方法返回要创建的类的子类的实例
在您的特定情况下,如果该方法返回一个可变字符串,我认为没有问题,因为该字符串是在该方法中本地创建的,并且没有在类中的其他位置使用
通常,如果这些对象是返回它们的类的IVAR/属性,则可能应该避免返回可变对象。如果这样做,则方法的调用方可能会发现返回的对象是可变的,然后更改其内容,而无需将更改通知对象的“拥有者”实例
还请注意,如果要返回不可变对象,return[randomString copy];
仅在ARC和垃圾收集下正确。使用手动内存管理,它应该是return[[randomString copy]autorelease];
或return[NSString stringWithString:randomString];
-(NSString *) genRandStringLength: (int) len
{
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
NSString *immutableString = [NSString stringWithString:randomString];
//OR
NSString *immutableString = (NSString *)randomString;
return immutableString;
}