objective-c 是可以兼容c语言语句跟c++语句的。
但是需要注意.m扩展名结尾的可以包含Objective-C和C代码。
如果需要使用c++代码扩展名为.mm 带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。
objective-c是面向对象的语言,所以跟其他面向对象的语言一样都有类的概念,objective-c的类都必须直接继承NSObject类,或间接继承NSObject(类的父类继承了NSObject)。objective-c跟java和c#一样只支持单一继承(注意:c++支持多继承,所以c++才比较难,也比较复杂)。objective-c类方法以+(加号)开头,实例方法以-(减号)开头。
NSLog printf 对比
NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数
NSLog输出后会自动换行,printf输出后不会自动换行
使用NSLog需要#import<Foundation/Foundation.h>
使用printf需要#include<stdio.h>
文件包含:
C语言和C++中我们都使用#include来包含头文件,但是这样我们容易一个头文件可能被包含多次,这样就需要我们用#ifndef,#end这样的宏定义来避免文件重复引用的问题。
Objective-C中则使用了#import来包含头文件,这样一个头文件就只能包含一次,直接避免了c语言和c++中使用#include文件重复引用。
@class和#import 的区别:
#import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这个类是如何定义的,暂时不用考虑。
比如在.h文件中我们只需要知道被引用的类的名称就可以了,不需要调用实体变量和方法,所以.h文件一般只需要@class来声明这个名称是类的名称,头文件中使用@class不仅效率高(比如类文件更改其他包含这个类的都需要重新加载),同事还可以解决循环引用的问题。而在.m文件里边因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
OC框架
所谓框架,就是一个集合,其中包含着头文件等资源文件
每个框架中均有一个主头文件(主头文件名跟框架名字相同),该头文件包含了框架中各个头文件,一但引入了主头文件,就可以在自己的程序里使用任何在该框架里的类
比如要使用Foundation框架,就导入它的主头文件即可:
#import <Foundation/Foundation.h>
关于ARC
ARC并不是垃圾收集,而且,引用计数也没有消失,只是变成自动而已。
使用ARC后则不能调用retain、release、autorelease、retainCount
dealloc方法也无需调用也不能调用[super dealloc]
使用ARC什么时候释放对象:当对象没有强指针(__strong,@property(strong))引用的时候对象就会释放。默认情况下都是强指针。
当两端循环引用时,解决方案(非ARC): 一端用retain, 一端用assign
当两端循环引用时,解决方案(ARC): 一端用strong,一端用weak
使用ARC时应该注意:属性名称不能以new开头
例如 @property NSString * newString是不可以的
strong ,weak都是用于oc对象类型
@property(assign)用于基本数据类型比如int