天天看點

iOS strong,retain,assign,weak,copy屬性實測

代碼:

//TestClass.h

#import <Foundation/Foundation.h>

@interface TestClass : NSString

@property(nonatomic,strong)NSString* strongStr;

@property(nonatomic,weak)NSString* weakStr;

@property(nonatomic,retain)NSString* retainStr;

@property(nonatomic,copy)NSString* CopyStr;

@property(nonatomic,assign)NSString* assignStr;

@end

//main.c

#import <Foundation/Foundation.h>

#import "TestClass.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // insert code here...

        TestClass *obj = [[TestClass alloc]init];

        NSMutableString *str = [NSMutableString stringWithString:@"abc"];

        obj.strongStr = str;

        obj.retainStr = str;

        obj.weakStr = str;

        obj.assignStr = str;

        obj.CopyStr = str;

        [str appendString:@"123"];

        NSLog(@"str = [%@]",str);

        NSLog(@"strongStr = [%@]",obj.strongStr);

        NSLog(@"retainStr = [%@]",obj.retainStr);

        NSLog(@"weakStr = [%@]",obj.weakStr);

        NSLog(@"assignStr = [%@]",obj.assignStr);

        NSLog(@"CopyStr = [%@]",obj.CopyStr);

        NSLog(@"str address = [%p]",str);

        NSLog(@"strongStr address = [%p]",obj.strongStr);

        NSLog(@"retainStr address = [%p]",obj.retainStr);

        NSLog(@"weakStr address = [%p]",obj.weakStr);

        NSLog(@"assignStr address = [%p]",obj.assignStr);

        NSLog(@"CopyStr address = [%p]",obj.CopyStr);

    }

    return 0;

}

//輸出

2015-12-23 16:40:29.251 test_strong_weak[433:7947] str = [abc123]

2015-12-23 16:40:29.252 test_strong_weak[433:7947] strongStr = [abc123]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] retainStr = [abc123]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] weakStr = [abc123]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] assignStr = [abc123]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] CopyStr = [abc]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] str address = [0x10010d8c0]

2015-12-23 16:40:29.253 test_strong_weak[433:7947] strongStr address = [0x10010d8c0]

2015-12-23 16:40:29.254 test_strong_weak[433:7947] retainStr address = [0x10010d8c0]

2015-12-23 16:40:29.254 test_strong_weak[433:7947] weakStr address = [0x10010d8c0]

2015-12-23 16:40:29.254 test_strong_weak[433:7947] assignStr address = [0x10010d8c0]

2015-12-23 16:40:29.254 test_strong_weak[433:7947] CopyStr address = [0x63626135]

由上面發現:

strong與retain類似

weak與assign類似

copy會重新開辟空間儲存當時的内容

繼續閱讀