本文做关于ivar的测试:
1.@property (nonatomic, strong)NSStirng*property1;这个声明是否编译器会生成一个ivar变量
2.property声明中声明为weak
3.property声明为assin
具体测试代码如下:
#import <Foundation/Foundation.h> @interface IvarTest : NSObject { NSString*ivar1; NSString*ivar2; } @property(nonatomic, strong)NSString*property1; @property(nonatomic, strong)NSString*property2; @end #import "IvarTest.h" @interface IvarTest() @property(nonatomic, strong)NSString*property3; @property(nonatomic, strong)NSString*property4; @property(nonatomic, weak)NSString*property5; @property(nonatomic, assign)NSString*property6; @end @implementation IvarTest { NSString*ivar3; NSString*ivar4; } @end #import "ViewController.h" #import "IvarTest.h" #import <objc/runtime.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; unsigned int count; Ivar *ivars = class_copyIvarList([IvarTest class], &count); for (unsigned int i = 0; i < count; ++i) { Ivar ivar = ivars[i]; const char *ivarName = ivar_getName(ivar); NSString*ivarNameString = [NSString stringWithUTF8String:ivarName]; NSLog(@"%@",ivarNameString); } } @end
运行后打印结果为:
2016-04-28 16:40:13.979 IvarTest[31253:260489] ivar1
2016-04-28 16:40:13.979 IvarTest[31253:260489] ivar2
2016-04-28 16:40:13.979 IvarTest[31253:260489] ivar3
2016-04-28 16:40:13.979 IvarTest[31253:260489] ivar4
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property1
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property2
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property3
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property4
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property5
2016-04-28 16:40:13.980 IvarTest[31253:260489] _property6
说明,property声明后,就会生成对应的ivar变量,property声明的是weak,assign都会生成对应的ivar变量