私はretain
とcopy
の違いを理解していると思いました。しかし、以下のコードに出会ったとき、私は再び混乱しました。保持してコピーしてください
ViewController.h:これらは、コードされている
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
NSMutableString *a;
NSMutableString *b;
NSMutableString *c;
}
@property (nonatomic, copy) NSMutableString *a;
@property (nonatomic, copy) NSMutableString *b;
@property (nonatomic, copy) NSMutableString *c;
@end
ViewController.m:
2011-12-31 16:54:50.244 RetainCopy[5783:207] a:1
2011-12-31 16:54:50.246 RetainCopy[5783:207] a:2
2011-12-31 16:54:50.246 RetainCopy[5783:207] b:2
2011-12-31 16:54:50.247 RetainCopy[5783:207] a:3
2011-12-31 16:54:50.247 RetainCopy[5783:207] b:3
2011-12-31 16:54:50.248 RetainCopy[5783:207] b:3
:結果は、なぜ
#import "ViewController.h"
@implementation ViewController
@synthesize a, b, c;
- (void)viewDidLoad
{
[super viewDidLoad];
self.a = [[NSMutableString alloc] initWithFormat:@"%@", @"aaa"];
NSLog(@"a:%d", a.retainCount);
self.b = a;
NSLog(@"a:%d", a.retainCount);
NSLog(@"b:%d", b.retainCount);
self.c = b;
NSLog(@"a:%d", a.retainCount);
NSLog(@"b:%d", b.retainCount);
NSLog(@"b:%d", c.retainCount);
}
@end
は、誰もが説明することができますか?ありがとう。
強調するために、** retainCountはまったく役に立たない**。それを呼び出さないでください。 (いい答えだ)。 – bbum
@bbum +1感謝と幸せな新年:) – justin
興味深い点: 'self.a = [[NSMutableString alloc] initWithFormat:@"%@ "、@" aaa "];'は 'に'を設定します不変のコピープロパティの 'NSMutableString'宣言は無視され、うまくいけばコンパイラによってフラグが立てられます(しかしそうではありません)。 – zaph