一、变量
这儿的变量主要讨论类中的成员变量,protected变量(或私有变量)在类的外面是不能直接访问的,可以通过KVC访问和赋值,public变量可以通过->访问,也可以提供对外访问的setter方法。
示例
@interface Worker : NSObject
{
//默认protected
NSString *_name;//姓名
//公开
@public
NSString *_job;//职业
}
@end
@implementation Worker
@end
//访问例子
Worker *w = [Worker new];
w->_job = @"job";
[w setValue:@"a" forKey:@"_name"];
NSLog(@"%@,%@",w->_job,[w valueForKey:@"_name"]);
输出: 2025-09-13 18:02:41.388821+0800 iOS_jilei[47450:2400775] job,a (lldb)
二、属性
属性是Objective-C 2.0引入的语法,主要用于生成setter/getter方法,简化变量的访问与内存管理。
特性
- 属性会生成setter、getter、ivar,默认实现@synthesize xxx = _xxx;
- 属性有多种修饰符,如readonly、readwrite、assign、retain、weak、unsafe_unretain、nonatomic等,默认是readwrite。readonly代表只读,retain代表生成的setter方法会把旧值release,新的值retain,weak代表弱引用,如果指向的对象释放了,变量会置空;unsafe_unretain类似weak,引用计数不会+1,不过对象释放后,assign和unsafe_unretain会指向野指针;assign主要用于基本数据类型,例如int、NSInteger等;
- @synthesize是编译器指令,用于自动生成成员的setter和getter方法,如果没有写,编译器会自动为我们生成一个带下划线的变量,一般的写法是
@synthesize xxx = _xxx,也可以写成@synthesize xxx,后者生成的变量就是xxx; - dynamic是告诉编译器不要生成setter/getter方法,需要用户生成;
三、总结
以上就是对iOS Objective-C中变量和属性的总结。