oc @property
时间: 2023-06-29 14:18:45 浏览: 136
"oc @property" 是 Objective-C 语言中定义属性的关键字。使用 @property 可以方便地定义类的属性,在编译器中自动生成属性的 setter 和 getter 方法,并且可以指定属性的读写权限、内存管理方式等。例如:
```
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
```
上述代码定义了一个名为 Person 的类,包含了两个属性 name 和 age。其中,name 属性使用了 copy 内存管理方式,age 属性使用了 assign 内存管理方式。同时,使用了 nonatomic 关键字来指定属性的读写权限为非原子操作。这样,在使用 Person 类时,就可以通过点语法访问和修改这两个属性:
```
Person *p = [[Person alloc] init];
p.name = @"Tom";
p.age = 18;
NSString *name = p.name;
NSInteger age = p.age;
```
上述代码分别为 p 对象的 name 和 age 属性赋值,并读取了这两个属性的值。
相关问题
oc @property weak
"oc @property weak" 是 Objective-C 语言中定义属性的关键字,并且使用了 weak 关键字来指定属性的引用类型为弱引用。弱引用是一种非拥有关系,不会增加对象的引用计数,当被引用的对象被释放时,弱引用会自动被设置为 nil,避免野指针的出现。例如:
```
@interface Person : NSObject
@property (nonatomic, weak) id delegate;
@end
```
上述代码定义了一个名为 Person 的类,包含了一个属性 delegate,并且使用了 weak 关键字来指定属性的引用类型为弱引用。在使用 Person 类时,可以给 delegate 属性设置一个实现了特定协议的对象,如下所示:
```
Person *p = [[Person alloc] init];
p.delegate = self;
```
上述代码将 self 对象赋值给了 p 对象的 delegate 属性。在这种情况下,如果 self 对象被释放了,p 对象的 delegate 属性会自动被设置为 nil,避免了野指针的出现。需要注意的是,weak 属性只能用于对象类型,不能用于基本数据类型。
oc @synthesize
"oc @synthesize" 是 Objective-C 语言中用于自动生成属性的 setter 和 getter 方法的关键字。在 Objective-C 2.0 之前,需要手动实现属性的 setter 和 getter 方法。而在 Objective-C 2.0 中,可以使用 @synthesize 关键字来自动实现属性的 setter 和 getter 方法。
举个例子,如果有一个名为 name 的属性,可以使用 @synthesize 来自动实现它的 setter 和 getter 方法:
```
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end
@implementation Person
@synthesize name;
@end
```
上述代码中,@synthesize name; 语句会自动生成 name 属性的 setter 和 getter 方法。这样,在使用 Person 类时,就可以通过点语法访问和修改 name 属性:
```
Person *p = [[Person alloc] init];
p.name = @"Tom";
NSString *name = p.name;
```
上述代码分别为 p 对象的 name 属性赋值,并读取了这个属性的值。需要注意的是,@synthesize 语句中的属性名称必须与 property 中声明的属性名称相同,否则会编译出错。另外,在 Xcode 4.4 之后,如果不手动指定 @synthesize,编译器会默认自动生成属性的 setter 和 getter 方法。
阅读全文
相关推荐














