iOS常量、变量、属性及其特性

1.Objective-C中声明常量使用关键字const。如:const double PI = 3.1514;

2.Objective-C中变量可以分为成员变量、局部变量和全局变量(用的很少,尽量不要用)。

//————————------------常量—————————————————//

方法一:

#define kDetailKey            @“detail text”

#define DOWNLOAD_TIMEOUT      60.0

#define degresssToRadian(x)  (M_PT*(X)/180.0)

这种方法直接使用#define定义函数、字符串和数字,和普通的C/C++一样,唯一的区别是字符串需要在前面加上“@”符号。

方法二:

typedef enum{

kTagLanguageView = 100,

kTagSeriesView,

kTagSeriesDetailView,

kTagThumbView,

kTagVideoView,

kTagFullPhotoView,

}TagSystemViews;

使用枚举定义常量,在这里kTagSeriesView等于101,在程序中直接使用kTagSeriesView来表示这个常量,这和C/C++一样。

方法三:

在.m或者.mm文件中使用静态常量声明,和C/C++使用方法一样,例如:

static NSString *BlockColorAlphaComponentKey =@"blockColorAlphaComponent”;

//————————------------变量—————————————————//

1.为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性。

但是为了提供灵活性,苹果也让开发者显示设置范围(四选一)。

2.四种编译指令如下:

@private

实例变量只能被声明它的类访问。

@protected

实例变量能被声明它的类和子类,所有没有显示指定范围的实例变量都是@protected。

@public

实例变量可以在任何地方被访问。

@packge

使用modern运行时,一个@package实例变量在实现这个类的可执行文件镜像中实际上是@public的,但是在外面就是@private。

OC中的@package与C语言中的变量和函数的private_extern类似。任何在实现类的镜像之外想使用这个实例变量都会引发link error。

这个类型最常用于框架类的实例变量,使用@private太限制,使用@protected或者@public又太开放。

//——————————————属性—————————————————//

属性:@property:@property只不过是给编译器看的一种指令,它可以编译之后自动为你生成相应的getter和setter方法。

1.公共属性表示你打算如何使用这一类的对象。

2.属性声明是一个指令,它告诉编译器如何为变量生成存取方法。(添加属性声明后,你将了解到有关存取方法的信息)

3.id类型是一个通用类型,OC使用id表示任意类型的对象,它可以作为一个占位符表示这是一个不确定的类型的对象或者引用。因此,所有的对象都可以用id来表示。

4.编译器指令@property可以为一个类声明属性,这是一个偷懒的好方法,用@property声明属性相当于同时声明并实现了对应的实例变量的访问器方法。当然,也可以通过指定属性的特性(Attribute)类控制自动生成的访问器方法的行为。

5.OC里的实例变量默认都是私有的。私有变量只在类自身和子类的实例方法里可见。

6.iOS OC声明变量在@interface括号中和使用@proper的区别:

方式一:直接在@interface中的大括号中声明。

@interface MyTest:NSObject

{

NSString *mystr;

}

方式二:直接用@property声明

@interface MyTest:NSObject

@property(strong,nonatomic)NSString *mystr;

随后在.m文件中@synthesize mystr = _myStr;(也可以在.m文件中不加@synthesize)

区别:

方式一声明的成员变量是只能在自己类内部使用,而不能在类的外部使用(就是通过类名.点的方式显示不出来。)。

方式二可以在类的外部访问,也可以在类的内部通过下划线+变量名或者self.变量名的方式访问。

苹果开发模板推荐的是方式二。

7.OC是C的严格父集,C能做的事情OC中都能做。

属性实际上一个setter方法和一个getter方法,所有对实例变量的访问都是如此,通过setter方法设置值,通过 getter方法获取值

你没有必要去优化没有必要优化的东西,你要优化的是很花时间的东西,而访问实例变量不会花太多时间。

8..h是共有的API

.m是私有的API以及你所有的实现。

所有指针要么是强的,要么是弱的,因为OC需要知道怎样处理内存和堆。强表示保持这个的存储,在堆中,保持这个所指的东西

7.plist:属性配置文件,基于XML格式,也扮演了一部分定义UI的角色,Xcode在编译的时候会读取里面的配置信息。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ea5a7ba2918473cd3228d5a8daab4150.html