Person クラスを作成しました。このクラスから 2 つのオブジェクトをインスタンス化します。
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person * __weak pweak = [Person new];
Person *p = [Person personWithName:@"Strong" lastName:nil dateOfBirth:nil];
}
return 0;
}
Person
クラスはそのメソッドをオーバーライドするためdealloc
、割り当て解除されたの名前が出力Person
されます。
すべてが期待どおりに進み、weak 変数がインスタンスを存続させませんPerson
。ログに次のように表示されます ("John" はPerson
オブジェクトのデフォルト名です)。
2013-01-23 17:36:51.333 Basics[6555:303] John is being deallocated
2013-01-23 17:36:51.335 Basics[6555:303] Strong is being deallocated
ただし、弱い変数への代入でファクトリ メソッドを使用すると、次のようになります。
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person * __weak pweak = [Person personWithName:@"Weak" lastName:nil dateOfBirth:nil];
Person *p = [Person personWithName:@"Strong" lastName:nil dateOfBirth:nil];
}
return 0;
}
これは私が記録したものです:
2013-01-23 17:44:16.260 Basics[6719:303] Strong is being deallocated
2013-01-23 17:44:16.262 Basics[6719:303] Weak is being deallocated
私は何か間違ったことをしていますか?
Person クラスの次のメソッドが関係している可能性があります。
- (id)initWithName:(NSString *)name lastName:(NSString *)lastName dateOfBirth:(NSDate *)birth {
self = [super init];
if (self) {
_name = name;
_lastName = lastName;
_dateOfBirth = birth;
}
return self;
}
+ (id)personWithName:(NSString *)name lastName:(NSString *)lastName dateOfBirth:(NSDate *)birth {
return [[self alloc] initWithName:name lastName:lastName dateOfBirth:birth];
}