您的位置:首页 > 移动开发 > Objective-C

object-c 知识点01

2015-07-22 17:02 686 查看
object-c中@是什么意思,有什么作用

放在一个字符串前面代表的是你这个字符串是NSString类型的。

文件类型说明:

.h     头文件,用于定义类、实例变量及类中的方法等定义信息(interface)。

.m    源文件,定义方法体,可实现objce-c和c方法(implementation)。

.mm   c++源文件

object-c支持强类型和弱类型两种方式定义一个对象变量:

强类型定义时变量类型即类命,且为指针类型

弱类型定义使用id型定义

1 MyClass *myObject;    // 强类型定义
2 id myObject;    //弱类型定义


4.方法的调用:

在Object-C中,调用一个方法叫做发送消息,方法调用语句定义在中括号”[]”中:

1
[myArray insertObject:anObject atIndex:0];


为了避免生成大量的临时变量,Object-C允许嵌套调用方法,使一个方法的返回值当作另一个方法的参数,如:

[[myAppObject theArray] inserObject[myAppObject objectToInsert]
atIndex:0];


5.self变量相当于java中的this。

6.继承

Ojbect-C中的继承同java相同,都是单一继承关系,要继承一个类,可写作:

1 @interface ClassA : NSObject

2

3 @end


其中NSObject类是最顶层类,一般所有类的最终父类都是它。

在子类中可以访问父类中的非private变量的实例变量和方法(静态方法和实例方法)。

注:只能访问非private属性的成员变量,说明该变量必须定义在interface中(类的声明中),因为在implementation中声明的成员变量全部都是private。

在子类中通过super访问父类中的方法,如:

1
[super init];


7.枚举

// 定义枚举

enum flag { false, true };

// 声明两个枚举变量,该枚举变量的值只能是true或false

enum flag endOfData, matchFound;

// 定义枚举

enum direction { up, down, left = 10, right };

// 或

enum boolean { no = 0, false = 0, yes = 1, true = 1 };

8.、函数

1)概念:具有特定功能的代码块的封装

2)函数的定义: 函数类型+函数名(形参列表)

函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2…..) {

函数体;//函数的实现

}

函数的好处:将不同的功能实现封装起来,容易阅读和维护;便于分工,调用的人可以不关心具体的实现

9.递归

1)概念:函数自己调用自己的一个过程

2)递归的优点是使代码结构层次更清晰使程序更简洁,缺点是占用资源太多,可能造成堆栈溢出。

10.

interface 用于声明类 默认是@protected (受保护的成员);@interface中只能写方法的声明(不能写实现)

.m文件内 @implementation中只能写方法的实现(不能写声明)

类的访问级别说明

1、@public 公有的成员,本类的成员方法,和其他的方法都可以访问

2、@protected  保护型的成员,本类和本类的子类的方法可以访问

3、@private 私有的成员,只能被本类的方法访问

4、@package  处于同一个框架中可以访问,介于private和public之间


11.

类实例化的两种方法

1、使用 alloc、init方法 例如:  Person *p=[[Person alloc]init];  alloc表示为对象在堆中开辟一片内存空间;init 表示初始化类对象。

2、使用new关键字,例如: Person *p=[Person new];  一般不建议使用此方法。


12.

set和get方法的使用

1、set方法用于给某个成员变量赋值,一般以set开头,接着变量名,带一个参数,参数类型与成员变量类型相同,没有返回值。

2、get方法用于获取某个成员变量的值,是实例方法,一般与成员变量名相同,(可以不加get在方法前面),没有参数,有返回类型,返回类型与成员变量的类型相同。


13.

实例方法与类方法的区别

1、实例方法之间可以使用self互相调用,类方法不可以。

2、实例方法可以操作成员变量,类方法不可以。

3、类方法调用直接用类名,不需要另外构建实例。


14:用 new 还是用 alloc/init

1.在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init],但是并不意味着你不会接触到new,在一些代码中还是会看到[className new],还有去面试的时候,也很可能被问到这个问题。

通过源码中我们发现,[className new]基本等同于[[className alloc] init];区别只在于alloc分配内存的时候使用了zone,这个zone是个什么东东呢?它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度;

3.而为什么不推荐使用new?

不知大家发现了没有:如果使用new的话,初始化方法被固定死只能调用init,而你想调用initXXX怎么办?没门儿!据说最初的设计是完全借鉴Smalltalk语法来的。而传说那个时候已经有allocFromZone:这个方法,但是这个方法需要传个参数id myCompanion = [[TheClass allocFromZone:[self zone]] init]; 这个方法像下面这样

但是,出现个问题:这个方法只是给对象分配了内存,并没有初始化实例变量。是不是又回到new那样的处理方式:在方法内部隐式调用init方法呢?后来发现“显示调用总比隐式调用要好”,所以后来就把两个方法分开了。

15:

这里写链接内容

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: