1. @interface和@implementation
分别在.h和.m文件开头处
@interface和@implementation都可以说是接口
oc中的类必须包括两部分,interface部分和implementation部分,这才是oc中的一个类的完整声明;然后OC中将成员变量和成员方法的声明部分放置在interface部分中,包括继承关系,protocal实现关系,都在interface里面的头部进行声明,然后将实现部分放置在implementation部分中,相当于是将类拆分成声明和实现两部分,这两部分缺一不可,所以在OC中,不妨不要将interface和implementation叫做接口,直接叫做类声明部分和实现部分来得容易理解多了,简而言之,oc中interface是类的一个部分,和implementation共同组成一个完整的类。
[email protected]@[email protected] 和@package
这三个关键词都是成员变量的可见度:
[email protected]: @public的级别是最低的,都可以用的对象->的方式找到成员变量,不安全
[email protected]:如果没有写可见度,默认是被保护的,被保护的成员变量可以在当前类及其子类被使用
[email protected] 私有的:只能当前的类可以使用,使用范围更小
[email protected] 这个是系统一些文件来使用,系统来用,如果以后看见了,直接跳过去就行了
[email protected] 属性 和@sythesize 属性的实现
(1)[email protected] 属性 :
在XCode4.5之后,属性一共可以做了三件事:
1.声明了设置器:setter和访问器:getter
2.实现了设置器和访问器
3.声明了一个成员变量,成员变量命名会在属性名前面加一个下划线
(2)[email protected]
在XCode4.5版本之前有这么一个关键词的定义
在.m文件中需要有一个关键词@sythesize才能实现setter和getter
[email protected] 结束语句
[email protected] 与 @ interface 一起使用 在.m和.h文件中
里面可以写:
(1).声明类的属性
(2).自定义初始化方法
(3).便利构造器等
[email protected] 与@implementation 一起使用 在.m文件中
里面可以写:
(1).实现类的方法
(2).自定义初始化方法
(3).便利构造器等
5.1. #define 宏定义
例子:
#define HEIGHT self.view.frame.size.height
其中 HEIGHT 是定义的新的名字. self.view.frame.size.height是程序中要用的名字,在头文件的下面用#define定义就可以实现 HEIGHT 和self.view.frame.size.height 完全相等,也就可以在下面的程序中直接使用
注意:define后面的新名字需要大写
5.2. typedef常用来定义一个标识符及关键字的别名
例子:
typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
和宏定义类似,typedef 也可以定义新的名字,只不过后面的INT . ARRAY[10] 和 pINT 是新名字,前面的是原来的名字
#define和typedef 的区别
#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。
宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。
例子:
typedef (int*) pINT;
#define pINT2 int*
实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;
表示定义了一个整型指针变量a和整型变量b。
注意:
1.typedef与const 一起用的时候不是简单的字符串替换
例子:
typedef char* PSTR;
然后:
int mystrcmp(const PSTR, const PSTR);
const PSTR实际上相当于const char*吗?不是的,它实际上相当于char* const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。
2.typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如:
typedef static int INT2; //不可行
编译将失败,会提示“指定了一个以上的存储类”。
所以说 , typedef只能替换一个存储类的关键字
版权声明:本文为博主原创文章,未经博主允许不得转载。