iOS属性,变量的区别与联系

2018-02-26  本文已影响0人  再好一点点

一:变量

首先在.h文件中写一个变量name

@interface ViewController : UIViewController{

    NSString *name;

}

如果想要调用这个name变量需要这样

self->name = @"哈喽";

无法使用点(.)语法

二:属性

以@property声明的是属性,如:

@property (nonatomic, assign) NSInteger age;

使用如下:

self.age = 18;

这里可以使用(.)语法,是因为属性会自动生成getter以及setter方法.

OC中的.语法 调用的其实是一些方法,无法直接调用变量

在XCode4以前只是简单地写一个@property (nonatomic, assign) NSInteger age;是无法生成setter与getter方法的,需要

@implementation ViewController

@synthesize age = _age;

@end

这样才会生成相应的getter以及setter方法.

另外属性默认使用atomic修饰(原子性),即:

在objective-c 属性设置里面 默认的就是atomic ,意思就是 setter /getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于 函数头尾加了锁 . 这样的话 并发访问性能会比较低 .

但是我们使用的时候一般使用nonatomic(非原子性)

非原子操作 一般不需要多线程支持的时候就用它,这样在 并发访问的时候效率会比较高 . 在objective-c里面通常对象类型都应该声明为非原子性的. iOS中程序启动的时候系统只会自动生成一个单一的主线程.程序在执行的时候一般情况下是在同一个线程里面对一个属性进行操作.

总结:

属性是含有getter与setter方法以及自动生成一个带下划线的同名变量,通过setter方法将数据存储在变量中,通过getter获取变量的值.

使用属性比直接使用变量更加方便,在setter中我们可以做一些想要的操作,可以使用getter进行懒加载数据.同时可以对属性进行一些修饰如:nonatomic(非原子特性),readonly(只读),readwirte(可读可写),weak(弱引用),copy(拷贝)等操作

上一篇下一篇

猜你喜欢

热点阅读