如何在Objective-C中访问外部类变量数据?

时间:2013-11-08 23:10:39

标签: objective-c

我有一个带有NSMutableDictionary varibale的头文件和一个函数如下

#import <Foundation/Foundation.h>
@interface Client : NSObject{}; 
@property (assign)NSMutableDictionary *dict;
- (NSMutableDictionary *)myDict;
@end

在.m文件中

@implementation Client
{
NSMutableDictionary *dict;//=[[NSMutableDictionary alloc]initWithCapacity:10];
}
-(NSMutableDictionary *):myDict{
return dict;
}

我的问题是我必须在哪里初始化dict?这样我就可以通过使用Client.myDict之类的东西从项目的任何地方访问它。 (它必须返回所有键值对)

1 个答案:

答案 0 :(得分:1)

您正在定义一个方法myDict来检索dict属性的值。但是当编译器合成该属性时,它将自动合成dict getter方法,因此不需要myDict方法。你可以删除它。

一般来说,你会这样做:

#import <Foundation/Foundation.h>

@interface Client : NSObject
@property (nonatomic, strong) NSMutableDictionary *dict;
@end

注意,@interface行没有大括号,也没有分号。

并且,在回答有关如何初始化属性(或技术上,合成的实例变量)的问题时,您可以在类的init方法中执行此操作:

@implementation Client

- (id)init
{
    self = [super init];
    if (self) {
        _dict = [[NSMutableDictionary alloc] init];
    }

    return self;
}

@end

注意,不需要显式声明的实例变量,因为编译器会为您合成一个(带有前导下划线)。此外,也不需要编写“getter”方法,因为编译器也会为你合成。

如果你使用的是ARC(我希望你是),你可以用assign替换strong,就像我上面所做的那样。但是,如果您不使用ARC,则将其保留为retain,但之后您必须编写dealloc方法(但写入此内容你有ARC):

- (void)dealloc
{
    [_dict release];
    [super dealloc];
}

然后您可以像这样使用此类:

Client *client = [[Client alloc] init];
[client.dict addObject:@"One"];

// you can access it this way

NSLog(@"client.dict = %@", client.dict);

// or this way

NSLog(@"[client dict] = %@", [client dict]);