Objective-C基础5 : 属性@property

1.类里面经常有一些变量需要进行set和get操作,OC中提供了方便的属性@property来替换set和get方法,这样能减少频繁且简单的重复代码。如下代码:

@interface Person : NSObject
@property NSString* strName;
@property int nAge;
@end
@implementation Person
@synthesize strName;
@synthesize nAge;
@end

通过在类声明变量前面添加@property表明这个变量是个属性变量@property NSString* strName,在类实现里面添加@synthesize让XCode为你生成编译代码@synthesize strName。实际上xcode编译器会在编译的时候自动为这个属性添加set和get方法,如上面例子中的StrName在类里面添加了方法setStrName和strName,我们可以通过方法设置和访问strName。但是方便的方法是通过.来访问。

 @autoreleasepool {
        // insert code here...
        Person* p = [[Person alloc] init];
        p.strName = @"52xpz";
        p.nAge = 16;
        NSLog(@"name:%@, age:%d", p.strName, p.nAge);
        NSLog(@"name:%@, age:%d", [p strName], [p nAge]);
        [p setStrName:@"akon"];
        [p setNAge:18];
        NSLog(@"name:%@, age:%d", p.strName, p.nAge);
        NSLog(@"name:%@, age:%d", [p strName], [p nAge]);

    }

[email protected]有一些可选项,比如copy(复制),retain(保留)、readonly(只读)、readwrite(可读写)、nonatomic(不要原子话访问)、assign(简单地赋值)。

属性默认是assgin和nonatomic选项。下面代码声明了strName为copy, readwrite;eye为retain, readwrite, nonatomic。方便啊!

@interface Person : NSObject

@property (copy, readwrite) NSString* strName;
@property int nAge;
@property (retain, readwrite, nonatomic) Eye* eye;
@end

如何不让编译器为我们生成属性代码而是用自己的代码呢?答案@dynamic关键字。

@interface Person : NSObject

@property (readonly) int nAge;

@end

@implementation Person

@dynamic nAge;

-(int) nAge
{
    return  10;
}

@end

3.关于属性的选择个人认为有一下几个原则:

1)set和get只要一个参数设置变量用属性,有两个及以上参数设置变量不应该用。

2)代码都是简单地设置和获取变量应该用属性,减少代码量的同时代码简单、可读性好。

时间: 2024-12-12 08:37:35

Objective-C基础5 : 属性@property的相关文章

iOS开发UI基础—transframe属性(形变)

iOS开发UI基础-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建"基于控件初始位置"的形变 CGAffineTransformMakeTranslation(平移) CGAffineTransformMakeScale(缩放) CGAffineTransformMakeRotation(旋转) (2) 创建"基于trans

iOS runtime探究(三): 从runtime开始理解OC的属性property

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

Yii2基本概念之——属性(property)

学习任何一门学问,往往都是从起基本的概念学起.万丈高楼平地起,这些基本概念就是高楼的基石,必须做详尽的分析.我们知道,Yii2是一款脉络清晰的框架,理顺了基础的概念和基本功能,学习更高级和复杂的功能就容易多了.Yii2是一款纯面向对象的框架,它对类的功能做了扩充:PHP类的功能分为属性和方法,而Yii2定义了类的三个功能:属性(property),行为(behavior)和事件(event). 为了更好的实现面向对象的编程,拿到一个现实的对象,要构造一个PHP对象与之对应,如果用Yii2框架去实

原创:新手布局福音!微信小程序使用flex的一些基础样式属性

来源:新手布局福音!微信小程序使用flex的一些基础样式属性 作者:Nazi Flex布局相对于以前我们经常所用到的布局方式要好的很多,在做微信小程序的时候要既能符合微信小程序的文档开发要求,又能使用不同以往的居中方式并减少css的相关样式声明. 先来看看关于flex的一张图: 从上面可以看到一些flexbox的相关信息, main axis 和 cross axis 指的是flexbox内部flex项目(flex item)的排列方向,通俗点说就是,里面的flex项目是按照横轴或者纵轴排列的顺

作为笔记:Objective-C属性property的一些认识

在头文件中声明: @property (nonatomic,strong) NSString * str; 在oc中,这一行代码表示一个名为str的属性. 在实现文件.m中声明: @synthesize str; 在oc中类中声明了这一句话就会自动生成两个方法(生成属性的getter和setter),一个属性,如果实现了属性(在.m文件中)则会生成一个实例变量. 在类别中声明了了属性则会自动生成两个方法,则必须实现setter和getter,类别中属性要用@dynamic,但是不会生成实例变量.

python静态属性----property

1.什么是静态属性property property是一种特殊的属性,访问它的时候会执行一段功能(函数)然后返回值. 在使用者直接要某个结果的时候,就需要用到了静态属性. 2.例子 计算BMI指数. class People: def __init__(self,name,tz,hit): self.name=name self.tz=tz self.hit=hit @property def bmi(self): return self.tz / (self.hit**2) p=People(

属性(property)与成员变量(ivar)

类内使用成员变量{}, 类外使用属性@property /*********** --- Person.h */ @interface Person : NSObject { NSString *_name; } @property (nonatomic, copy) NSString *sex; @property (nonatomic, assign) int age; - (void)getPropertyAndiVar; @end /*********** --- Person.m */

实例变量(instance var)与属性(@property)的关系

实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和属性重复输入的麻烦.而使用@synthesize可以改变_name名称.@property和@synthesize不必成对出现. @property name:指示编译器自动合成setter和getter方法,setter方法名即setName,而getter方法名即name.@property后面

属性( @property )与成员变量的那些事 :

属性( @property )与成员变量的那些事 : 属性对成员变量扩充了存取方法 . 属性默认会生成带下划线的成员变量 . 早期的 Xcode 不支持自动合成成员变量的存取方法 , 所以古老的iOS工程师是愤怒的 . 后来 Xcode 智能了一点 , 可以用 @synthesize 关键字自动合成成员变量的存取方法 , 此时的iOS工程师是郁闷的 . 现在 Xcode 会在我们声明属性时自动合成存取方法 , 连@synthesize都不用写了 , 这样iOS工程师彻底解放了 . 顺便提一下 @