Objective-C语法学习 初学者必备文档
Objective-C语法学习是本文要介绍的内容,主要介绍了变量、方法、对象等一些内容。我们一起来看详细内容。
变量定义
interface 文件(*.h)中定义,定义要放在 interface 名称后的括号内
对象的定义要用指针[NSButton *aButton;],使用正常名称
普通变量正常定义使用
方法定义
interface 文件(*.h)中定义,定义放在括号外且 @end 标记前
以符号([-]表对象方法,[+]表静态方法)开头,其次以括号括起来的返回值类型,然后是方法名称,以冒号开始参数的加入,参数按正常定义格式,但要把类型以括号括起来,第一个参数以后的参数要加标志符,以分号结束[-(void)testFunction:(NSString *)aString secondPara:(int)aInt;]
方法名以小写字母开头
方法的实现
implementation 文件(*.m)中定义,文件中先以 import 关健字引入 interface 文件[#import "MyClass.h"],方法定义在 @implementation和@end关键字之间定义方法,跟定义在interface中对方法的定义类似,但方法的实现在大括号之间
方法的参数是方法的一部分,如果参数是指针则在使用时要重新分配内存,用后要释放内存,如果是普通变量则正常使用,如:
-(void)setName:(NSString *)tmpName{ [tmpName retain]; [tmpName release]; tmpName = name; }
释放内存操作放在对tmpName的调用之后,调用一个释放的方法。
初始化类的对象可以在方法[-(id)init{}]中实现。
方法及变量的使用
实例化一个对象:先分配内存并创建类
{MyClass *anInstance=[MyClass alloc;]}
然后初始化对象:{[anInstance init]}(调用了实例的init方法),则一般实例化为:
{MyClass *anInstance =[[MyClass alloc] init];}
以中括号来调用{[object message]},以分号结尾
参数在对象操作后加入{[object method:para1 labelPara2:para2]},方法可做嵌套,在要使用的地方以同样的方式调用即可
调用同一个类中的其它方法,对象名用 self
使用实例直接调用对象的变量是可以的,但最好通过方法访问变量
返回值可以正常使用
当然用alloc创建了实例,也要释放:
{[anInstance release];}
内存自动释放方式
以 stringWithSting 代替 alloc ,可以使系统自动释放内存
创建对象:
+(id)stringWithString:(NSString *)aString; *aString =[NSString stringWithString:@"Hello,World!"]
实例化对象时设置自动回收:
{MyClass *anInstance=[[[MyClass alloc] init] autorelease];}
一般的语言使用关键字class来定义类,而objective-c是使用关键字@interface加上@end来声明,用关键字@implementation加上@end来定义类。其二,用类的对象来调用该类的方法时,一般的高级语言都是用对象名加上符号‘.’来调用,但是objective-c是用中括号把对象名和所调用的方法名括起来调用。
(1)Objective-C的编译器处理后缀为m的文件时,可以识别Objective-C和c的代码,处理mm文件可以识别Objective-C,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,
也不能出现Objective-C的代码,因为cpp只是cpp
(2)在mm文件中混用cpp直接使用即可,所以Objective-C混cpp不是问题
(3)在cpp中混用Objective-C其实就是使用Objective-C编写的模块是我们想要的。
如果模块以类实现,那么要按照cpp class的标准写类的定义,头文件中不能出现Objective-C的东西,包括#import cocoa的。实现文件中,即类的实现代码中可以使用Objective-C的东西,
可以import,只是后缀是mm。如果模块以函数实现,那么头文件要按c的格式声明函数,实现文件中,c++函数内部可以用Objective-C,但后缀还是mm或m。