声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite 产生setter\getter方法
readonly 只产生简单的getter,没有setter。
assign 默认类型,setter方法直接赋值,而不进行retain操作
retain setter方法对参数进行release旧值,再retain新值。
copy setter方法进行Copy操作,与retain一样
nonatomic 禁止多线程,变量保护,提高性能
参数类型
参数中比较复杂的是retain和copy,具体分析如下:
getter 分析
1、 @property(nonatomic,retain)test* thetest;
@property(nonatomic ,copy)test* thetest;
等效代码:
-(void)thetest
{
return thetest;
}
2、@property(retain)test* thetest;
@property(copy)test* thetest;
等效代码:
-(void)thetest
{
[thetest retain];
return [thetest autorelease];
}
setter分析
1、 @property(nonatomic,retain)test* thetest;
@property(retain)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest!= newThetest) {
[thetestrelease];
thetest= [newThetest retain];
}
}
2、@property(nonatomic,copy)test* thetest;
@property(copy)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest!= newThetest) {
[thetestrelease];
thetest= [newThetest copy];
}
nonatomic
如果使用多线程,有时会出现两个线程互相等待对方导致锁死的情况(具体可以搜下线程方面的注意事项去了解)。在没有(nonatomic)的情况下,即默认(atomic),会防止这种线程互斥出现,但是会消耗一定的资源。所以如果不是多线程的程序,打上(nonatomic)即可
retain
代码说明
如果只是@property NSString*str;
则通过@synthesize自动生成的setter代码为:
-(void)setStr:(NSString*)value{
str=value;
}
如果是@property(retain)NSString*str;
则自动的setter内容为:
-(void)setStr:(NSString*)v{
if(v!=str){
[str release];
str=[v retain];
}
}
分享到:
相关推荐
相信每个初学者对@property和@synthesize都感到非常的陌生,在此给大家分享下我的自己的理解,有不当之处,还望多多指教。详细说明文章在下面连接http://blog.csdn.net/comeontom/article/details/7455459
### iOS开发中属性property和synthesize详解 #### 一、引言 在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将...
1 获取XML的数据DATA 2 调用解析类,提供对象名。 3 返回NSMutableDictionary或者NSMutableArray,键值封装。...@synthesize currentResult; @synthesize map; @synthesize list; ********0..........
@synthesize objectName; @synthesize lvUp; @synthesize root; @synthesize buildEnd; -(NSData *)objctPackage:(NSMutableDictionary *)object objectName:(NSString *)name xmlTemplateName:(NSString *)...
本项目"StoryboardTest"聚焦于Xcode 4.5版本,通过实际操作展示了这一版本中引入的新性能和特性,特别是对"属性自动绑定" (@synthesize by default) 的运用,帮助开发者更高效、便捷地进行应用开发。 Xcode 4.5是...
@property还可以与@synthesize关键字一起使用,但现代的Xcode版本默认已经为@property声明的属性自动生成了对应的实例变量和存取方法,所以我们通常不再需要显式地使用@synthesize。 此外,@property还支持更多的...
最后,@synthesize和@dynamic关键字用于编译器生成属性的getter和setter方法。@synthesize告诉编译器自动为属性生成对应的成员变量和存取方法。如果我们使用@synthesize配合@property,那么编译器会帮我们实现这些...
`@synthesize`指令会自动生成相应的setter和getter方法: ```objective-c @implementation Photo @synthesize caption; @synthesize photographer; @end ``` #### 五、点语法 Objective-C2.0新增了一种更简洁的点...
1. 使用@property和@synthesize声明一个成员变量,给其赋值是时要在前面加上"self.",以便调用成员变量的setmember方法。 直接调用成员变量并且给其赋值:member=[NSString stringWithFormat:@””];将不执行...
- `@synthesize`是自动为属性生成getter和setter的方法,而在需要在运行时动态创建存取方法时,可以使用`@dynamic`。 4. **常用的开发工具** - **Instruments**:性能分析工具,用于内存泄漏检测、CPU使用率分析...
@synthesize name, age; - (void)sayHello { NSLog(@"你好,我是%@", self.name); } @end ``` 接下来,我们创建继承自“人”类的“学生”类和“老师”类。继承语法是在子类接口声明中使用冒号(:)后跟父类的...
而在`.m`实现文件中,空行的使用同样遵循一定的标准,如@implemention与@synthesize之间、方法之间的空行等。在方法内部,空行用于分隔不同功能块,使得代码层次分明。 二、关于空格: 空格的合理使用可以使代码更...
在Objective-C中,自定义getter和setter可以通过`@synthesize`关键字实现,但现在通常由`@dynamic`处理,因为它们在运行时动态生成。自定义行为通常用于添加数据验证、触发通知或其他副作用: ```objc @synthesize ...
`@synthesize`关键字自动为属性生成getter和setter方法。`sayHello`方法是接口中定义的 `- (void)sayHello` 的实现。 二、接口与实现的关系 在Objective-C中,接口和实现是分离的,这有助于遵循“信息隐藏”原则,...
Objective-C提供了`@property`和`@synthesize`关键字来简化实例变量的声明和访问器方法的实现。例如: ```objective-c @interface Person : NSObject @property (nonatomic, strong) NSString *name; @property ...
@synthesize showTextsList; @synthesize showLap; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 初始化代码 [self setBackgroundColor:[UIColor clearColor]]; /...
`@property`关键字用于声明属性,`@synthesize`则自动生成getter和setter方法。 OC的另一个核心特性是消息传递。当我们调用一个方法时,实际上是向对象发送一条消息。例如,`[myObject sayHello];`就向`myObject`...
- `@synthesize` 通常与 `@property` 一起使用,用于自动生成存取方法的实现。 7. categories(分类): - Objective-C 允许通过分类给已有类添加方法,而不需要继承。 8. protocols(协议): - 协议定义了一...
`@property`关键字用于声明属性,`@synthesize`则自动为属性生成getter和setter方法。 接下来,我们要提到协议(Protocol)。Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,但不提供实现。协议常...