`

objective-c中property的属性

    博客分类:
  • ios
 
阅读更多
Property:

是Objective-C 2.0中新增加的語法。利用這個語法,在precompiler時會幫我們產生getter及setter。
@property放在物件宣告的地方。基本語法如下:

@property(attributes, …) type propertyName;

Attributes間用”,”分開,可設定的屬性有:

1.getter,setter的名稱,如getter=getVaribleName

2.讀寫設定:
  • 預設為readwrite,會產生getter與setter。
    
  • readonly表示沒有setter所以不能出現在等號的左邊。
    
3.setter設定
  • 預設為assign,把等號右邊的數值與位址賦予等號左邊。
    
  • retain,只能用在objective-C的物件類型,在賦值的同時會呼叫retain,原本的值會被release釋放。
    
  • copy,用在Objective-C的物件類型,賦值時會自動呼叫copy,原本的值會被release釋放。此物件類型需實作NSCopying protocol。
    
assign与retain的区别:

There's no such thing as the "scope of an object" in Objective-C. Scope rules have nothing to do with an object's lifetime — the retain count is everything.
You usually need to claim ownership of your instance variables. See the Objective-C memory management rules. With a retain property, your property setter claims ownership of the new value and relinquishes ownership of the old one. With an assign property, the surrounding code has to do this, which is just as mess in terms of responsibilities and separation of concerns. The reason you would use an assign property is in a case where you can't retain the value (such as non-object types like BOOL or NSRect) or when retaining it would cause unwanted side effects.
Incidentally, in the case of an NSString, the correct kind of property is usually copy. That way it can't change out from under you if somebody passes in an NSMutableString (which is valid — itis a kind of NSString).
copy与retain的区别
copy是复制一个新对象给指针,retain是将原来的对象给指针。当需要修改值,但又不影响原来的值时,使用copy
copy的实验如下
代码:
NSMutableString *test = [[[NSMutableString alloc]initWithFormat: @"helloaaaa"]autorelease];
        
        NSLog(@"1The test retaincount = %d", [test retainCount]);
        A *obj = [A new];
        NSMutableString *a = [test copy];
        NSRange r;
        r.length = 3;
        r.location = 2;
        [test replaceCharactersInRange:r withString:@"aaa"];
        NSLog(@"2The test retaincount = %d, %@", [test retainCount], test);
        NSLog(@"3The a retaincount = %d, %@", [a retainCount], a);
        NSLog(@"After a release");
        [a release];
        NSLog(@"4The test retaincount = %d, %@", [test retainCount], test);
        NSLog(@"5The a retaincount = %d, %@", [a retainCount], a);
实验结果:
2010-08-12 21:28:38.135 TestRetain[1941:a0f] 1The test retaincount = 1
2010-08-12 21:28:38.138 TestRetain[1941:a0f] 2The test retaincount = 1, heaaaaaaa
2010-08-12 21:28:38.138 TestRetain[1941:a0f] 3The a retaincount = 1, helloaaaa
2010-08-12 21:28:38.139 TestRetain[1941:a0f] After a release
2010-08-12 21:28:38.139 TestRetain[1941:a0f] 4The test retaincount = 1, heaaaaaaa
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
(gdb)


4.getter設定
  •   noatomic,預設是atomic(不寫就是用預設值,沒有atomic這個值),主要是用在多執行緒時,atomic保証可以取得正確的值,但效率較差。在手機上因效率考量,多用noatomic。
    
使用時在implementation中加入synthesize,語法如下

把build下及/Users/Jason/Library/Application Support/iPhone Simulator/4.0路径下缓存删了,重试
分享到:
评论

相关推荐

    Objective-C

    Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...

    Object-C语言教程-提供了 Objective-C 的基本语法和一些示例,希望能够帮助你快速入门 Objective-C

    **Objective-C**是一种结合了C语言的基础特性和Smalltalk式消息传递机制的面向对象编程语言。作为C语言的一个超集,Objective-C允许开发者直接使用C语言代码。此外,它还借鉴了C++的一些特性,尽管它并非C++的直接...

    Objective-C程序设计

    在Objective-C中,属性(Properties)用于封装数据,它们提供了访问和修改对象状态的方式。你可以通过@property关键字声明属性,并使用@synthesize关键字自动生成getter和setter方法。此外,Objective-C还支持动态...

    Object-C语言教程:Objective-C 简介

    Objective-C中的控制结构与C语言基本一致,包括但不限于if语句、switch语句、循环等。 ##### 2.7 属性(Properties) 属性提供了一种简洁的方式来管理类的实例变量。通过属性,可以轻松地设置和获取类的成员变量。...

    objective-c的计算器

    4. **属性和ivar**:Objective-C中的属性提供了封装、访问控制和自动内存管理。使用`@property`关键字声明属性,`@synthesize`来生成存取方法,或者自定义getter和setter。ivar(实例变量)存储对象的状态,通常以下...

    Objective-C基础教程源代码 Learn objective-C on the Mac Mark Dalrymple著书

    1. **Objective-C语法**:Objective-C的语法基于C语言,但引入了类、接口和消息传递等概念。这包括定义类、属性(@property)和方法(@selector)的语法,以及理解类接口(.h)和实现(.m)文件的作用。 2. **对象...

    Objective-C 编程语言.pdf

    3. **C语言的超集**:由于Objective-C是C语言的超集,因此可以在Objective-C程序中直接使用C语言的语句和数据类型,这使得Objective-C具有很高的兼容性。 4. **内存管理**:Objective-C早期版本使用引用计数的方式...

    Objective-C示例代码1

    2. **属性(Property)**:在Objective-C中,属性用来封装数据。`FractionDemo`类可能有` numerator`和`denominator`两个属性,分别代表分数的分子和分母,它们可能是`@property`关键字声明的。 3. **初始化方法**...

    Objective-C语言教程、案例与项目资源详解.docx

    ### Objective-C语言教程、案例与项目资源详解 #### 一、Objective-C基础知识 **1.1 类与对象** Objective-C的核心概念是类和对象。类是对象的模板或蓝图,它定义了对象应该具备哪些属性(如变量)和行为(如方法...

    Objective-C编程之道

    在Objective-C中,类通过@interface和@implementation来定义,属性通过@property声明,方法通过-(return_type)selector:(参数类型)parameters;定义。 其次,Objective-C中的消息传递是其核心特性。与其他语言不同,...

    学习Objective-C: 入门教程

    此外,Objective-C还支持.mm文件类型,允许在Objective-C代码中混合使用C++代码,这对于需要高性能计算的场景非常有用。 #### 示例代码分析 在Objective-C中定义一个类,如MyClass,通常包含以下结构: 1. **类的...

    Objective-C 2.0运行时系统编程指南

    类型编码(Type Encoding)允许Objective-C编译器和运行时系统处理类型信息,而属性声明(Property Declaration)则是一种语法糖,用来声明对象的获取和设置方法(getters和setters)。这两种机制简化了代码的编写,...

    0基础iOS开发学习计划Objective-c语言内容概述.doc

    属性是Objective-C中的一个重要特性,它简化了属性的管理和访问。通过声明属性,可以自动生成对应的setter和getter方法。 - **属性声明**:属性可以用关键字`@property`来声明,例如: ```objective-c @interface...

    Objective-C经典入门源代码

    Objective-C是在C语言的基础上扩展的,因此,它继承了C的语法特性,如变量声明、控制结构(如if-else、for、while)、函数等。同时,它引入了消息传递机制,这是面向对象编程的核心。在Objective-C中,对象通过发送...

    From C++ to Objective-C

    Objective-C 2.0引入了新的关键字,比如@property、@dynamic等,来支持新的特性,如属性的声明和动态绑定。 在Objective-C中,还包含了一些特殊的值,如nil、Nil、YES和NO,这些与C++中的NULL或布尔值true和false不...

    objective-c基础教程(附源代码)

    首先,Objective-C是在C语言的基础上扩展的,因此,理解C语言的基本语法是学习Objective-C的前提。它引入了消息传递机制,这是Objective-C的关键特性,允许对象之间进行通信。消息传递类似于函数调用,但更加灵活,...

    objective-c 2.0 课后习题答案

    Objective-C 2.0 是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,主要用于iOS和macOS的应用程序开发。Objective-C 2.0在Objective-C的基础上添加了一些新特性,使得代码更加简洁易读,提高了开发效率。...

    objective-c的一些代码

    总之,"objective-c的一些代码"涵盖了Objective-C语言的基础、面向对象编程的原理以及iOS和macOS开发中的实际应用场景。通过练习、作业和课堂示例,开发者可以逐步掌握这个语言并成为熟练的iOS或macOS开发者。

Global site tag (gtag.js) - Google Analytics