iOS学习笔记(一):ObjectiveC语法初探

来源:互联网 发布:傲剑舍利子升级数据 编辑:程序博客网 时间:2024/06/06 04:45

由于之前的工作内容主要是Windows开发,常年与C++相伴,最近因项目需要,开始接触iOS开发. 

iOS虽然可以支持C/C++,但是CocoaTouch提供的都是基于ObjectiveC的接口,因此ObjectiveC是开发iOS应用的必备语言.

相信有过C++开发基础的人,学习ObjectiveC并不是难事,毕竟OC也是面向对象的开发语言,这里就不讲类似于HelloWorld这样的示例了.我从我自己在语法学习中碰到的些问题与C++做了些对比,对于掌握语法还是有些帮助的.

1. 变量声明:

OC中的变量声明和C++类似,也分基础类型和对象类型,基础类型和C++一样;对象类型OC里全部是指针类型,不像C++里还有指针,引用,实例等多个概念.


2.函数声明:

OC里使用的是中括号来表示函数的调用,例如[a b] 等价于C++中的a.b();表示调用类对象a的方法b.有参数的则是[a b:param1].

有意思的是,OC中使用了参数描述的限定符(这个名称是我猜的)来增加多参数函数语句的可读性. 例如比较函数min, 在OC里的定义可以是 +(int) min:(int)num1 compareto:(int)num2 ; 这里的compareto就是一个描述符,在函数调用的时候必须加上,如: int c = [class min:a1 compareto:a2];

另外OC里用函数前面的+ -符号来表示函数是静态函数还是成员函数.


3.类别Category:

@interface MyAppDelegate (MyCategory) <TestProtocol> 

这里的(MyCategory)括号里的表示扩展某个类(Category),区别于继承,相当于给某个类增加一些属性和方法。

(1)类别只能添加新方法,无法添加新的实例变量

(2)如果类别名和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

后面的尖括号标示实现某个协议(protocol),可以看成是C++中的需继承,表示类必须实现TestProtocol协议的所定义的方法。


4.类的定义:

@interface MyAppDelegate (MyCategory) <TestProtocol> 

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic, strong) MyChatTabBarController *tabBarController;

@end 

@property (strong, nonatomic) UIWindow *window;这句表示定一个一个类的属性,是强引用,nonatomic表示不是线程安全的,性能稍好于线程安全的定义(atomic). 这样的定义的好处是代码比较简洁:这一行代码相当于在头文件里的代码:

{

   UIWindow * _window;

}

- (UIWindow *) window;

- (void)setWindow:(UIWindow *) val;


property 可以定义在.h中表示是公有的,如果在m文件中则外面不能访问。

@synthesize window=__window; 

这个语句也是常用的写法,表示在类中声明了一个成员变量__window,当访问window这个属性的时候实际上是对__window的操作;等同于省略了下列代码:

- (UIWindow *) window{

    return __window;

}

- (void)setWindow:(UIWindow *) val{

    __window = val;

}



5. 类的初始化

ClassA *a = [[ClassA alloc] init ];通用写法,init函数可以替换成其他的初始化函数,也可以自己实现。

6.self 关键字

这个很好理解,相当于C++里的this指针,但是由于OC里大量使用了property,因此在对于property定义的成员(例如memberA)时member = value 和self.memberA = value;的意义是有差别,前一个仅仅是变量的复制,后一个则是调用了类的setter和getter函数,特别是对于NSOb

ject的属性的时候,后一种方法能有效的控制引用计数,防止内存泄漏。除非有特别的用途,一般property定义的成员变量建议加上self限定符进行使用。


7.id 关键字

这个类似于C++中的auto,但是这个关键字可以用来修饰在函数的参数和返回值。


8. NS开头

NS开头的一般都是系统库里的对象,都是有引用计数机制的,在定义属性的时候需要加上retain

NSString 是Cocoa里的基础字符串类。初始化 @"hello world";

NSLog 输出到debug窗口,基础类型和C++一样"%d",如果是继承自NSObject 需要格式化成"%@"


9.BOOL 类型

这个类型用的时候需要小心, 因为是个数字型,而且系统定义了两个宏 YES和NO, 尽量不要将数字的返回值去和YES作比较, YES是个固定的非零值。


私以为掌握这些的C++开发者就基本上能看懂iOS的代码了,当然还有一些特殊的宏需要慢慢的积累和学习才能了解.

欢迎大家补充.


0 0
原创粉丝点击