Objective-C で弱いプロパティがどのように機能するかを知りたいです。この例では、"myClass" の弱いプロパティ "myString" の値は、NSLog で出力した場合にのみ保持されます。何故ですか?
#import <Foundation/Foundation.h>
#include <stdio.h>
@interface myClass : NSObject
@property (nonatomic, weak)NSString *myString;
- (void)readString;
@end
@implementation myClass
@synthesize myString;
- (void)readString
{
const int MAXBUFFER = 80;
char buffer[MAXBUFFER+1];
NSLog(@"Input string:");
fgets(buffer, MAXBUFFER, stdin);
NSString *tempString = [[NSString alloc] initWithUTF8String:buffer];
myString = tempString;
NSLog(@"myString: %@", myString); // Why does this line make all the difference?
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool
{
myClass *myInstance = [[myClass alloc] init];
[myInstance readString];
NSLog(@"myInstance.myString: %@", myInstance.myString);
}
return 0;
}
readString メソッドの NSLog 行がコメント アウトされている場合、myInstance.myString は "(null)" になります。どうして??