如果头文件声明
@interface SomeClass: NSObject {
Data* d;
}
@property (nonatomic, retain) Data* d;
Run Code Online (Sandbox Code Playgroud)
为什么实现文件中的以下行给我一个警告(并且init方法不会被调用?)
[[[self d] alloc] init];
Run Code Online (Sandbox Code Playgroud)
我得到的警告是
未找到实例方法'-alloc'(返回类型默认为'id')
同时,Data有
- (id) init方法,没有被召唤.
请帮我理解原因.
alloc应该在类上调用,而不是在实例上调用.
interface SomeClass : NSObject
{
Data *d;
}
Run Code Online (Sandbox Code Playgroud)
在SomeClass上声明一个init方法,使其看起来像:
- (id) init
{
self = [super init];
if (self)
{
d = [[Data alloc] init];
}
return self;
}
- (void) dealloc
{
[d release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
你现在做:
SomeClass *c = [[SomeClass init] alloc];
Run Code Online (Sandbox Code Playgroud)
你可以使用这门课.请注意,您应该阅读有关类和对象以及内存管理的更多内容(当您应该释放c等时).
如果您有可能使用ARC(自动参考计数),您将无需处理释放物品.但这并不是Xcode 4.1所带来的,只有4.2才能公开访问.