objective-c - ivar 不会响应 NSMutableString 方法

标签 objective-c cocoa properties instance-variables nsmutablestring

#import <Foundation/Foundation.h>

@interface Engine : NSObject {
    NSMutableString *mutableName;
}

@property (assign)  NSMutableString *mutableName;

@end

为什么我的 ivar, engine.name 不能使用这个简单的 NSMutableString 方法? mutableName 是一个 NSMutableString,并已使用 @property@synthesize 正确实现。

#import "Engine.h"
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    Engine *engine = [[Engine alloc]init];


  #import "Engine.h"
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Engine *engine = [[Engine alloc]init];

engine.mutableName = @"Jones";
[engine.mutableName insertString:@"Mrs." atIndex:0];
NSLog(@"Full name is %@", engine.mutableName);

}

    [pool drain];
    return 0;
}

#import "Engine.h"

@implementation Engine

@synthesize mutableName;

@end

#import "Engine.h"
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    Engine *engine = [[Engine alloc]init];

    engine.mutableName = @"Jones";
    [engine.mutableName insertString:@"Mrs." atIndex:0];
    NSLog(@"Full name is %@", name);

    [pool drain];
    return 0;
}

最佳答案

您还没有显示您的代码,但我怀疑您所做的事情被声明为 namemutableName属性并实现它们以在后台使用相同的 ivar。在这种情况下,您的mutableName属性,同时声明为 NSMutableString ,实际上返回 NSString被分配给name属性(property)。如果这就是您正在做的事情,并且您确实希望它以这种方式工作,那么您需要更改您的 name访问器如下所示(假设 _name 是支持 ivar):

- (NSString *)name {
    return [[_name copy] autorelease]; // take a snapshot of the string
}
- (void)setName:(NSString *)name {
    [_name release];
    _name = [_name mutableCopy];
}

这样,字符串在底层保持可变,但在使用 name 时作为不可变字符串返回。访问器。

关于objective-c - ivar 不会响应 NSMutableString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906608/

相关文章:

cocoa - 什么是 CGSUpdateManager 以及为什么它会提示?

objective-c - 使用 Cocoa 检测正在运行的应用程序何时播放音频

.net - 如何让 WinForm 设计器完全忽略自定义控件上的属性?

objective-c - 类扩展中私有(private)实例变量和属性的区别(Objective-c 2.0)

ios - 属性(property)被取消

objective-c - NSTextField 可访问性 - 如何为画外音提供替代文本

ios - 应用程序进入后台后每 n 分钟获取一次用户位置

objective-c - 表格列上的复选框不会记录点击

ios - 即使设备旋转,也始终以横向录制视频(横向->纵向->横向)

iphone - CGPathRef 交集