`
h416756139
  • 浏览: 365890 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

@synthesize

    博客分类:
  • ios
 
阅读更多

声明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];
}
}

分享到:
评论

相关推荐

    Objective-C中的@property和@synthesize用法详解

    相信每个初学者对@property和@synthesize都感到非常的陌生,在此给大家分享下我的自己的理解,有不当之处,还望多多指教。详细说明文章在下面连接http://blog.csdn.net/comeontom/article/details/7455459

    iOS开发中属性 property 和 synthesize 详解

    ### iOS开发中属性property和synthesize详解 #### 一、引言 在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将...

    Objective-c解析XML封装

    1 获取XML的数据DATA 2 调用解析类,提供对象名。 3 返回NSMutableDictionary或者NSMutableArray,键值封装。...@synthesize currentResult; @synthesize map; @synthesize list; ********0..........

    Objective-c对象组装XML

    @synthesize objectName; @synthesize lvUp; @synthesize root; @synthesize buildEnd; -(NSData *)objctPackage:(NSMutableDictionary *)object objectName:(NSString *)name xmlTemplateName:(NSString *)...

    StoryboardTest

    本项目"StoryboardTest"聚焦于Xcode 4.5版本,通过实际操作展示了这一版本中引入的新性能和特性,特别是对"属性自动绑定" (@synthesize by default) 的运用,帮助开发者更高效、便捷地进行应用开发。 Xcode 4.5是...

    OC-模型的Setter,Getter的由来,@property的由来

    @property还可以与@synthesize关键字一起使用,但现代的Xcode版本默认已经为@property声明的属性自动生成了对应的实例变量和存取方法,所以我们通常不再需要显式地使用@synthesize。 此外,@property还支持更多的...

    ios_assign,retain和copy详解

    最后,@synthesize和@dynamic关键字用于编译器生成属性的getter和setter方法。@synthesize告诉编译器自动为属性生成对应的成员变量和存取方法。如果我们使用@synthesize配合@property,那么编译器会帮我们实现这些...

    苹果公司的手机开发语言

    `@synthesize`指令会自动生成相应的setter和getter方法: ```objective-c @implementation Photo @synthesize caption; @synthesize photographer; @end ``` #### 五、点语法 Objective-C2.0新增了一种更简洁的点...

    objective-c小技巧

    1. 使用@property和@synthesize声明一个成员变量,给其赋值是时要在前面加上"self.",以便调用成员变量的setmember方法。 直接调用成员变量并且给其赋值:member=[NSString stringWithFormat:@””];将不执行...

    2020面试题精选.pdf

    - `@synthesize`是自动为属性生成getter和setter的方法,而在需要在运行时动态创建存取方法时,可以使用`@dynamic`。 4. **常用的开发工具** - **Instruments**:性能分析工具,用于内存泄漏检测、CPU使用率分析...

    Objective-C简单继承代码

    @synthesize name, age; - (void)sayHello { NSLog(@"你好,我是%@", self.name); } @end ``` 接下来,我们创建继承自“人”类的“学生”类和“老师”类。继承语法是在子类接口声明中使用冒号(:)后跟父类的...

    iOS编码规范

    而在`.m`实现文件中,空行的使用同样遵循一定的标准,如@implemention与@synthesize之间、方法之间的空行等。在方法内部,空行用于分隔不同功能块,使得代码层次分明。 二、关于空格: 空格的合理使用可以使代码更...

    iOS getter setter方法

    在Objective-C中,自定义getter和setter可以通过`@synthesize`关键字实现,但现在通常由`@dynamic`处理,因为它们在运行时动态生成。自定义行为通常用于添加数据验证、触发通知或其他副作用: ```objc @synthesize ...

    Objective-C接口实现教程

    `@synthesize`关键字自动为属性生成getter和setter方法。`sayHello`方法是接口中定义的 `- (void)sayHello` 的实现。 二、接口与实现的关系 在Objective-C中,接口和实现是分离的,这有助于遵循“信息隐藏”原则,...

    Object-C基础教程.pdf

    Objective-C提供了`@property`和`@synthesize`关键字来简化实例变量的声明和访问器方法的实现。例如: ```objective-c @interface Person : NSObject @property (nonatomic, strong) NSString *name; @property ...

    ios_自定义图文混排走马灯.txt

    @synthesize showTextsList; @synthesize showLap; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 初始化代码 [self setBackgroundColor:[UIColor clearColor]]; /...

    IOS开发中的OC

    `@property`关键字用于声明属性,`@synthesize`则自动生成getter和setter方法。 OC的另一个核心特性是消息传递。当我们调用一个方法时,实际上是向对象发送一条消息。例如,`[myObject sayHello];`就向`myObject`...

    objective-c基础知识

    - `@synthesize` 通常与 `@property` 一起使用,用于自动生成存取方法的实现。 7. categories(分类): - Objective-C 允许通过分类给已有类添加方法,而不需要继承。 8. protocols(协议): - 协议定义了一...

    深入浅出Objective-C 源代码 第一部分

    `@property`关键字用于声明属性,`@synthesize`则自动为属性生成getter和setter方法。 接下来,我们要提到协议(Protocol)。Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,但不提供实现。协议常...

Global site tag (gtag.js) - Google Analytics