2012-01-10 3 views
1

これは正しいとは言えません。私は、ShareKitという名前のソースコードを見ていました.Nathanという名前の人が書いたもので、後でdeallocで解放するという見解を自動化しています。iOS:自動リリ​​ース後のリリース

+1

そのオブジェクトの割り当てコードを確認すると便利です。しかし、私は彼の論理が正しいと思う。 – Dancreek

答えて

1

なぜそれが間違っていると思われるのか正確にはわかりません。たとえばこれは完全にあなたが見ているようなものと同じ種類を示す有効なコードです:

@interface SomeClass : NSObject 

@property (nonatomic, retain) NSNumber *someNumber; 

@end 

@implementation SomeClass 

@synthesize someNumber; 

- (id)init { 
    if ((self = [super init]])) { 
     self.someNumber = [[[NSNumber alloc] initWithInt:5] autorelease]; // retain count = 1 (alloc) - 1 (on next drain) + 1 (retaining property) = 1 
    } 
} 

- (void)dealloc { 
    [someNumber release]; // retain count = 0 
    [super dealloc]; 
} 

@end 

autorelease後に起こっreleaseには何の問題もありません。

有効になり、コードのもう一つのビット(完全に無意味であるが!):

NSNumber *someNumber = [[NSNumber alloc] initWithInt:5]; // retain count = 1 
[someNumber retain]; // retain count = 2 
[someNumber autorelease]; // retain count = 2 (-1 on next drain) = 1 
[someNumber release]; // retain count = 1 (-1 on next drain) = 0 
+0

これがなぜ完全に有効か説明できますか?私は自動リリースプールとマニュアルリリースを混ぜる理由は考えられません。 – ktingle

+0

私の最初の例は、それがなぜ有用かを示しています。プロパティに割り当てることは、多くの場合、1行に収まるように行われます。そして、 'dealloc'で' someNumber'を '解放'します。あなたが破壊されているので、あなたが所有しているすべてのものを '解放'しているからです。 – mattjgalloway

+0

「リリースコード」はどちらですか? – mattjgalloway

0

いいえ、ありませんがあります。 自動解放プールは、そのインスタンスが削除された各インスタンスのリリースを呼び出します。

関連する問題