OC学习-04-属性

// 周四周五学习的内容较多,较紧,所以统一放到了周六自习日总结

// 注: 本节应该是在第八天才讲,提前是因为方便后面更好的使用getter和setter方法,所以提前放到第四天,所以部分内容不完善,将在后期完善.

属性

属性是OC 2.0定义的语法,主要为实例变量提供了setter和getter方法的默认实现

主要简化了程序代码,并且增加了实例变量的访问安全性

属性的定义及实现

声明:使用@property声明属性

// 属性
@property NSString *name;

属性就相当于@interface中声明了两个方法(setter和getter)

实现:使用@synthesize实现属性

@synthesize name = _name;

相当于实现了setter和getter

在现在的代码中并不用写,@synthesize 是在Xcode4.5以后开始不写的,但是在之前的老工程里,还有大量的@synthesize存在,所以只需要了解

属性的属性

  • OC中提供属性目的前面提过就是为了简化程序猿编码
  • 为属性提供了一些关键字来控制getter和setter的实现细节

    属性的属性一共可以分为三大类

第一类: 读写性控制

  • readonly,只读,即只声明getter方法
@property(readonly)NSString *name;
// 等价于
-(NSString *)name;
  • readwrite,读写,即为setter和getter方法都声明
@property(readwrite)NSString *name;
// 等价于
-(NSString *)name;
-(void)setName:(NSString *)name;

注意:readwrite是读写性控制的默认设置

第二类: 原子性

  • atomic : setter和getter方法在多线程访问下是绝对安全的,即在setter.getter内部做了多线程访问.是原子性控制的默认设置
  • nonatomic : setter和getter内部不会做多线程的访问处理

注意: 一般在开发过程中,getter和setter处处在用,如果使用atomic,需要不断的加锁解锁来保证线程安全访问,会占用过多资源. 所以通常设置成nonatomic,当需要线程安全的时候,在定义atomic

第三类 : 语义设置

- assign ,一般是NSInteger,CGfloat会使用,因为他们在栈区,不需要内存管理,所以用assign

- retain ,一般是对象类型会用到,比如我们自己写的类,还有NSArray会用

- copy , 一般只有字符串会使用copy

@property(nonatomic,copy) NSArray *arr;
@property(nonatomic,assign) NSInteger age;
@property(nonatomic,assign) CGFloat score;
@property(nonatomic,retain) NSString *color;

点语法

点语法是OC 2.0中定义的语法格式,提供了便捷的属性访问方式

只要是符合系统默认的setter 和 getter书写格式的方法都可以使用点语法

[stu setStuName:@"abc"]
等价于
stu.stuName = @"abc";

注意:属性是一对getter和setter方法,点语法是属性的另一种调用格式

KVC

key - value - coding 键值对编码

把属性名看成是kvc中的key键,把要修改的值看成是value,然后通过KVC的方法,把值赋给指定的key

    Student *stu = [[Student alloc] init];
    [stu setValue:@"abc" forKey:@"stuName"];
    NSLog(@"%@",stu.stuName);
    NSLog(@"%@",[stu valueForKey:@"stuName"]);

版权声明:本文为博主原创文章,转载请注明原文地址

时间: 2024-12-16 09:20:51

OC学习-04-属性的相关文章

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

OC中的属性特征

在刚开始学习oc的过程中,一直对声明完返回值后的属性特征不咋明白啥意思,今天特地找了一下资料,彻底的明白其中的意思. oc中的属性特征主要有assign,copy,retain这三个主要的,还有readonly,readwrite.   另外,atomic和nonatomic:以及strong,weak. assign主要是针对基础类型数据和c数据类型的简单赋值,而且它不调用索引计数器(retain count). retain主要是指调用oc中的对象,对oc中的对象进行赋值(主要针对NSObj

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,

OC基础 04

OC 基础04 [email protected]基本概念 >[email protected]是编译器的指令 >[email protected] 用在声明文件中告诉编译器声明成员变量的的访问器(getter/setter)方法 这样的好处是:免去我们手工书写getter和setter方法繁琐的代码 @property基本使用 1.在@inteface中,用来自动生成setter和getter的声明 示例: 用@property int age; // 就可以代替下面的两行 - (int)a

(转载)OC学习篇之[email protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在

OC学习总结之面向对象和类

OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象,简称OOP,它是以事物为中心,参与事件的事物是核心,完成事件只是事物的一个小任务.面向过程,简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成.也就是面向对象侧重于从问题在寻找客体.客体的作用.客体间的关系即“谁”.“做什么”.“怎么做”,面向过程侧重于问题的分解即“事

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

(转载)OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,让初始化操作只执行一次 2.类提供一个类方法产生对象 这个可以直接定义一个类方法 3.类中有一个私有的自己对象 我们可以在.m文件

OC学习篇之[email protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性:http://blog.csdn.net/jiangwei0910410003/article/details/41707161今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入