1.#import 导入头文件(只导入一次,但不能解决重复包含的问题)
@autoreleasepool{}代码写在里面,这是一个内存管理关键字
2.打印输出函数NSLog(@“hello world!”); @开头。NSLog默认有换行。
打印输出OC的字符串
NSString * str=@“abcdefg”;
NSLog(@“str=%@”,str);
3.oc创建一个类:
@interface A(类名):NSObject(根类)
{
int age;(成员变量)//oc里只能有成员变量,默认是受保护的,也叫类字段。
}
-(void)show;(成员方法)//oc里面只能声明成员方法,不能在类里面实现。
@end
*************前半部分声明,后半部分实现**************
@implementationA
-(void) show
{
成员方法实现 ,oc里面叫做 消息
………………
}
@end
4.OC的对象只能在堆里面开辟空间(除了oc字符串)。
OC调用成员函数的格式 ;
A * a=[ A alloc ];//oc的成员方法默认是共有的;把对象空间的地址赋给对象指针,(把对象的地址赋给了a)
[ a setA:3 ] //给对象赋值;
示例:
//Student.h文件
#import<Foundation/Foundation.h>
@interfaceStudent : NSObject
{
int num;
int age;
}
-(void)setStu:(int)_num:(int)_age;
-(void)show;
@end
//Student.m文件
#import"Student.h"
@implementationStudent
-(void)setStu:(int)_num:(int)_age
{
num=_num;
age=_age;
}
-(void) show
{
NSLog(@"num=%3d,age=%d",num,age);
}
@end
//main.m文件
#import<Foundation/Foundation.h>
#import"Student.h"//包含头文件
int main(intargc, const char * argv[])
{
@autoreleasepool
{
Student *stu=[Student alloc];//实例化对象
[stu setStu:001 :18];//给对象赋值
[stu show];//打印输出
}
return 0;
}
5.声明函数的格式:
无参:
-(返回值类型)函数名 -(void)Stu; void不代表没返回值,而是返回值为void;
有参:
单参数
-(返回值类型)函数名:(参数类型)参数名; -(void)Stu:( int )_num;
多参数
-(void)setNum:(int)newNum andScore:(int)newScore;//函数名setNum; andScore; setNum和andSore是标签;
6. int score=[stu score];//有返回值函数调用
NSLog(@"score=%d",score);
str->c=2;//共有成员变量也能够用
7. id 在oc特有类型:范型对象指针 和 void *(通配型指针)类似
"+" 加方法(类方法)由类名调用,格式:[ 类名 函数名 ]
作用:a.创建(开辟)空间 b.单例模式(UI里面)c.一些数学运算(不用创建对象,直接用类名来调用,节省空间)
"-" 减方法(普通方法、实例方法)调用必须要创建对象,有了对象才能调用
p.s:用户(程序员)绝大多数是写减方法,系统会用到很多加方法。
8.oc的构造函数
相对于c++ ,oc中的构造函数是伪构造函数,oc的构造函数必须手动去写和手动调用才能对对象进行初始化。
nil 空对象;和c中的NULL类似
self(指针) 当前类的对象和C++中的this指针类似
super 不是指针,只是一个编译器符号,但是起到了指针的作用
-(id)init //无参构造函数;
{
if(self=[superinit]);//super 当前类的父类
age=5; //隐藏着一个self指针;
return self;
}
无参构造函数调用//例如:Dog *dog=[[Dog alloc]init];
-(id)initWithAge:(int)_ageandWithWeight:(int)_weight //有参构造函数;
{
if(self=[super init])//先对继承过来的父类空间进行初始化,如果成功返回空间地址,失败返回nil(所以必须做判断)
{
age=_age;//父类初始化成功后再对子类类字段(成员变量)进行初始化;
weight=_weight;
}
return self;
}
有参构造函数调用//例如:Dog *dog=[[Dog alloc]initWithAge:5 andWithWeight:10];