可修改性(Mutability) .
对于immutable string 来说, 能够从accessor 方法中安全返回。
@interface MYSimpleClass
{
NSString *_myStringValue;
}
- (NSString *)safeStringValue;
@end
@implementation MYSimpleClass
- (NSString *)safeStringValue
{
// 安全返回实
return _myStringValue;
}
@end
但是, 如果是mutable string,下面的accessor 方法将破坏类的封装:
@interface MYSimpleClass
{
NSMutableString *_myStringValue;
}
- (NSMutableString *)unsafeStringValue;
@end
@implementation MYSimpleClass
- (NSMutableString *)unsafeStringValue
{
/ / myStringValue may be changed externally
return myStringValue;
}
@end
安全返回mutabel 变量的解决办法:
1。 方法要强行 type casting返回变量. mutable -> immutable
2. 返回变量的一个 mutable copy.
@interface MYSimpleClass
{
NSMutableString *_myStringValue;
}
- (NSString *)safeStringValue1;
- ( NSMutableString *)safeStringValue2;
}
@implementation MYSimpleClass
- (NSString *)safeStringValue1
{
// 安全返回方案1 - type casting
//
return myStringValue;
}
- ( NSMutableString *)safeStringValue2
{
// 安全返回方案 2 - mutable copy
return [[myStringValue mutableCopy] autorelease];
}
@end
- Mutable 的对象处理起来不如不可改的(immutable) 对象效率高。
- 内存优化和性能优化对于mutable 类一般不适用。
对于immutable string 来说, 能够从accessor 方法中安全返回。
@interface MYSimpleClass
{
NSString *_myStringValue;
}
- (NSString *)safeStringValue;
@end
@implementation MYSimpleClass
- (NSString *)safeStringValue
{
// 安全返回实
return _myStringValue;
}
@end
但是, 如果是mutable string,下面的accessor 方法将破坏类的封装:
@interface MYSimpleClass
{
NSMutableString *_myStringValue;
}
- (NSMutableString *)unsafeStringValue;
@end
@implementation MYSimpleClass
- (NSMutableString *)unsafeStringValue
{
/ / myStringValue may be changed externally
return myStringValue;
}
@end
安全返回mutabel 变量的解决办法:
1。 方法要强行 type casting返回变量. mutable -> immutable
2. 返回变量的一个 mutable copy.
@interface MYSimpleClass
{
NSMutableString *_myStringValue;
}
- (NSString *)safeStringValue1;
- ( NSMutableString *)safeStringValue2;
}
@implementation MYSimpleClass
- (NSString *)safeStringValue1
{
// 安全返回方案1 - type casting
//
return myStringValue;
}
- ( NSMutableString *)safeStringValue2
{
// 安全返回方案 2 - mutable copy
return [[myStringValue mutableCopy] autorelease];
}
@end