1、问题
自定义类需要表示它所建模的实体的属性。那你就需要知道在Objective-C中如何定义和实现这些属性。如果你不想自己编写getter和setter方法,那你可以用@synthesize。
2、解决方案
要用@synthesize来实现properties,你仍然需要在类的接口中声明这些properties,之后在类的实现中实现这些properties。只是,这次不需要写你自己的assessor代码了,而是用@synthesize关键字命令编译器在编译过程中为你插入这样的代码。
3、原理
第1个要编写的文件就是头文件
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property(strong) NSString *name;
@end
第2个当然就是类的实现文件,此时就用到@synthesize关键字以及将那些你希望生成getters和setters方法的property包含进来,就是放在该关键字的后面。
#import "Car.h"
@implementation Car
@synthesize name;
@end
调用:
(1)用dot notation
car.name = @"Sports Car";
NSLog(@"car is %@", car.name);
(2)用标准的Objective-C消息
4、代码
Listing 1-7. Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property(strong) NSString *name;
@end
=========================================
Listing 1-8. Car.m
#import "Car.h"
@implementation Car
@synthesize name;
@end
===========================================
Listing 1-9. main.m
#import "Car.h"
int main (int argc, const char * argv[]){
@autoreleasepool {
Car *car = [[Car alloc] init];
car.name = @"Sports Car";
NSLog(@"car.name is %@", car.name);
[car setName:@"New Car Name"];
NSLog(@"car.name is %@", [car name]);
}
return 0;
}
相关推荐
相信每个初学者对@property和@synthesize都感到非常的陌生,在此给大家分享下我的自己的理解,有不当之处,还望多多指教。详细说明文章在下面连接http://blog.csdn.net/comeontom/article/details/7455459
接下来,我们通过一个具体的例子来展示使用`@property` 和 `@synthesize` 前后代码的变化。 **1. 没有使用 `@property` 和 `@synthesize`** 在没有使用这两个特性的情况下,我们需要手动声明和实现所有的getter和...
@property (nonatomic, retain) NSMutableString *currentResult; @property (nonatomic, retain) NSMutableDictionary *map; @property (nonatomic, retain) NSMutableArray *list; -(NSMutableDictionary *)...
@property还可以与@synthesize关键字一起使用,但现代的Xcode版本默认已经为@property声明的属性自动生成了对应的实例变量和存取方法,所以我们通常不再需要显式地使用@synthesize。 此外,@property还支持更多的...
但现在,`@synthesize`通常是自动进行的,除非有特殊需求,一般不需要手动编写。 了解这些基础知识后,开发者可以更好地利用`@property`来设计类的接口,控制内存管理,以及确保代码的线程安全性。在实际项目中,...
这样,虽然没有使用`@synthesize`,但手动定义的方法与使用`@property`和`@synthesize`的效果相同。 此外,还可以使用其他关键字来定制属性行为,如`readonly`、`readwrite`(默认)、`assign`、`strong`(ARC环境...
@synthesize objectName; @synthesize lvUp; @synthesize root; @synthesize buildEnd; -(NSData *)objctPackage:(NSMutableDictionary *)object objectName:(NSString *)name xmlTemplateName:(NSString *)...
如果我们使用@synthesize配合@property,那么编译器会帮我们实现这些方法。如果使用@dynamic,那么我们必须手动实现这些方法。 在使用ARC环境下,开发者不需要直接使用这些关键字,因为ARC会自动管理内存。但在非...
在`@implementation`部分,我们可以使用`@synthesize`来自动创建`ivar`并将其与`@property`关联起来。默认情况下,`@synthesize`会为`name1`创建一个名为`_name1`的`ivar`。然而,我们可以手动指定`ivar`的名字,就...
在Xcode 4.5之前,当我们声明一个属性时,需要手动使用@synthesize关键字来生成getter和setter方法。但在Xcode 4.5及更高版本中,这个过程已经自动化,系统会默认为每个属性生成对应的存取方法,除非我们明确选择不...
1. 使用@property和@synthesize声明一个成员变量,给其赋值是时要在前面加上"self.",以便调用成员变量的setmember方法。 直接调用成员变量并且给其赋值:member=[NSString stringWithFormat:@””];将不执行...
Objective-C是一种强大的面向对象编程语言,特别是在iOS和macOS应用开发中广泛使用。在这个场景中,我们关注的是Objective-C中的“继承”概念,这在创建类的层次结构中扮演着核心角色。继承允许一个类(子类或派生类...
- `@synthesize` 通常与 `@property` 一起使用,用于自动生成存取方法的实现。 7. categories(分类): - Objective-C 允许通过分类给已有类添加方法,而不需要继承。 8. protocols(协议): - 协议定义了一...
例如,在类定义中使用`@property`声明属性: ```objective-c @interface Photo : NSObject @property (retain) NSString *caption; @property (retain) NSString *photographer; @end ``` `@synthesize`指令会自动...
而在`.m`实现文件中,空行的使用同样遵循一定的标准,如@implemention与@synthesize之间、方法之间的空行等。在方法内部,空行用于分隔不同功能块,使得代码层次分明。 二、关于空格: 空格的合理使用可以使代码更...
Objective-C提供了`@property`和`@synthesize`关键字来简化实例变量的声明和访问器方法的实现。例如: ```objective-c @interface Person : NSObject @property (nonatomic, strong) NSString *name; @property ...
在Objective-C中,我们通常使用`@property`关键字来声明属性,并自动生成getter和setter。例如: ```objc @property (nonatomic, strong) NSString *name; ``` 这段代码会为`name`属性自动生成getter和setter方法...