localComplete ブロックと self.block のメモリ アドレスが同じである理由を教えてください。self.complete のプロパティは copy に設定されています。念のため、self.complete に割り当てるときに localComplete で copy も呼び出します。
- (void) test {
CompletionBlock localComplete = ^{
};
NSLog(@"localComplete - %p", localComplete);
self.block = [localComplete copy];
NSLog(@"self.complete - %p", self.block);
self.block();
}
出力は次のとおりです。
2013-10-05 08:39:18.549 TestApp[90703:a0b] localComplete - 0x60b8
2013-10-05 08:39:18.550 TestApp[90703:a0b] self.complete - 0x60b8
別の例として、文字列を作成します。
// creating string
self.carType = [[NSString alloc] initWithFormat: @"Good%@", @"year"];
NSLog(@"self.carType - %p", self.carType);
// same memory address???
NSString *carInitString = [[NSString alloc] initWithString: self.carType];
NSLog(@"carInitString - %p", carInitString);
// same memory address???
NSString *carCopy = [self.carType copy];
NSLog(@"carCopy - %p", carCopy);
// different memory address
NSString *carInitWithFormat = [[NSString alloc] initWithFormat: @"%@", self.carType];
NSLog(@"carInitWithFormat - %p", carInitWithFormat);
そして出力:
2013-10-05 09:45:01.667 TestApp[91103:a0b] self.carType - 0xa084910
2013-10-05 09:45:01.668 TestApp[91103:a0b] carInitString - 0xa084910
2013-10-05 09:45:01.668 TestApp[91103:a0b] carCopy - 0xa084910
2013-10-05 09:45:01.668 TestApp[91103:a0b] carInitWithFormat - 0xa336b70
carInitString と carCopy のメモリ アドレスが異なるのはなぜですか? プロジェクトのビルド設定で最適化がオフになっています。