IOS@proportyキーワード(一)retain strong
5707 ワード
@interface User : NSObject
@property (nonatomic,retain) NSString* tRetain;
@property (nonatomic,assign) NSString* tAssign;
@property (nonatomic,copy) NSString* tcopy;
@end
クラスUserには属性tRetainがあり、テストだけでNSStringタイプを使用します(このタイプは一般的にcopyを使用します.NSMutablesStringである可能性があるので、割り当て後に他の場所で内容を変更したくない).
User* user = [[User alloc]init];
NSString* testRetain = [NSString stringWithFormat:@"retain"];
NSLog(@"testRetain.retainCount=%lu",(unsigned long)testRetain.retainCount); //1
user.tRetain = testRetain;
NSLog(@"testRetain.retainCount=%lu",(unsigned long)testRetain.retainCount); //2
NSLog(@"user.tRetain.retainCount=%lu",(unsigned long)user.tRetain.retainCount); //2
NSString* testRetain2 = @"retain2";
NSLog(@"testRetain2.retainCount=%lu",(unsigned long)testRetain2.retainCount); //4294967295 max unsigned long
user.tRetain = testRetain2;
NSLog(@"testRetain.retainCount=%lu",(unsigned long)testRetain.retainCount); //1
NSLog(@"testRetain2.retainCount=%lu",(unsigned long)testRetain2.retainCount); //4294967295
NSLog(@"user.RetainValue.retainCount=%lu",(unsigned long)user.tRetain.retainCount); //4294967295
NSString* testRetain3 = [NSString stringWithFormat: @"retain3"];
NSLog(@"testRetain3.retainCount=%lu",(unsigned long)testRetain3.retainCount); //1
[testRetain3 retain];
NSLog(@"testRetain3.retainCount=%lu",(unsigned long)testRetain3.retainCount); //2
NSString* testRetain4 = [NSString stringWithString:testRetain3];
NSLog(@"testRetain3.retainCount=%lu",(unsigned long)testRetain3.retainCount); //3
NSLog(@"testRetain4.retainCount=%lu",(unsigned long)testRetain4.retainCount); //3
strongはARC後に導入されたキーワードであり,ARC環境ではRetainと同等である.
NSSring*str=[NSString stringWithString:文字列];この方法は、retainプロパティに前述した値を割り当てることに相当します.後続の文字列パラメータのカウントが4294967295の場合、strのカウントもです.文字列パラメータがカウント可能である、例えば1であれば、実行後のカウントに1を加算.