初始化自定义类的对象的问题
问题描述:
我正在尝试为我的程序制作自定义HashTable。是的,我知道Xcode中已经有了一个HashTable类,但是对于这种情况我有一个自定义类。它应该很简单,但是当我试图在我的视图控制器中使用它时,即使在调用初始化方法之后,调试器仍显示其值为“0x0”。下面的代码:初始化自定义类的对象的问题
//header file HashTable.h
#import <Foundation/Foundation.h>
@interface HashTable : NSObject
{
}
-(void)initWithLength:(int)capacity;
-(void)add:(NSObject*)object withName:(NSString*)name;
-(id)getObjectFromIndex:(int)index;
-(id)getObjectWithName:(NSString*)name;
@end
//main file HashTable.m
#import "HashTable.h"
@implementation HashTable
NSMutableArray* values;
NSMutableArray* markers;
-(id)initWithLength:(int)capacity //Apparently, this never gets called
{
self = [super init];
if (self)
{
values = [[NSMutableArray alloc] initWithCapacity:capacity];
markers = [[NSMutableArray alloc] initWithCapacity:capacity];
}
return self;
}
-(void)add:(NSObject*)object withName:(NSString*)name
{
[values addObject:object];
[markers addObject:name];
}
-(id)getObjectFromIndex:(int)index
{
return [values objectAtIndex:index];
}
-(id)getObjectWithName:(NSString*)name
{
for (int i = 0; i < [markers count]; i++)
{
if ([[markers objectAtIndex:i] isEqualToString:name]) {return [values objectAtIndex:i];}
}
return [NSObject new];
}
-(void)removeObjectFromIndex:(int)index
{
[values removeObjectAtIndex:index];
[markers removeObjectAtIndex:index];
}
-(void)removeObjectWithName:(NSString*)name
{
for (int i = 0; i < [markers count]; i++)
{
if ([[markers objectAtIndex:i] isEqualToString:name])
{
[values removeObjectAtIndex:i];
[markers removeObjectAtIndex:i];
return;
}
}
}
-(BOOL)isEmpty
{
return [values count] == 0;
}
-(void)dealloc
{
[values release];
[markers release];
[super dealloc];
}
@end
然后我有一个使用哈希表视图控制器的部分:
//header file
#import <UIKit/UIKit.h>
#import "HashTable.h"
@interface Circuitry_LabViewController : UIViewController
{
HashTable* table;
}
@property(nonatomic, retain) HashTable* table;
@end
//main file
#import "Circuitry_LabViewController.h"
@implementation Circuitry_LabViewController
@synthesize table;
- (void)viewDidLoad
{
[table initWithLength:10];
[super viewDidLoad];
}
我看不到什么,我在这里失踪。谁能帮忙?
答
你的意思做这-viewDidLoad:
table = [[HashTable alloc] initWithLength:10];
有什么地方告诉我,你这样做是错误的。
所以即使我在头文件中声明它,我仍然需要这样做吗? – RaysonK
@RaysonK是的,你这样做。 –
好的,做到了,但它仍然是“0x0”。我也收到一个警告,说'表格可能无法识别'alloc''。我需要在HashTable中创建一个alloc方法吗? – RaysonK