OC中只能使用指针变量来间接操作对象
类的声明使用的关键字是@interface
@interface 类名
@end
结尾的@end表示类声明结束
类的实现使用的关键字是@implementation
@implementation 类名
@end
结尾需要加上@end,告诉编译器类实现完毕
/*
类名:Car
属性:轮胎个数、时速(速度)
行为:跑
*/
//完整的写一个函数:函数的声明和定义(实现)
//完整的写一个类:类的声明和实现
//1、类的声明
//:Car继承自NSObject类,目的是让Car这个类具备创建对象的能力(这个类在Foundation框架中)
#import <Foundation/Foundation.h>
@interface Car:NSObject
{
//用来声明对象属性(成员变量(也成为实例变量 instance variable),默认会初始化为0)
@public //将后面的所有的属性的访问级别变成public,可以让外部的指针间接访问对象内部的成员变量
int wheels;//轮胎个数
int speed;//时速
}
//方法(行为):方法名、参数、返回值(方法也分声明、实现两部分)
//只要是OC对象的方法,必须以减号(-)开头
//OC方法中任何数据类型都必须用小括号() 括住
//OC方法中的小括号():括住数据类型
- (void) run;
@end
//2、类的实现(就是写方法的实现)
@implementation Car
//方法的实现(说清楚方法里面有什么代码)
- (void) run
{
NSLog(@"车子跑起来了");
}
@end
int main()
{
//在OC中想执行一些行为,就写上一个中括号[行为执行者 行为名称]
//利用类来创建对象
//执行了Car这个类的new行为来创建新对象
//定义了一个指针变量p(左边的*不能省略)。p将来指向的是Car类型的对象
//[Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
Car *p=[Car new];
Car *p2=[Car new];
p2->wheels=5;
p2->speed=300;
//给p所指向对象的wheels属性赋值
p->wheels=4;
p->speed=250;
//给p所指向对象发送一条run消息
[p run];
NSLog(@"车子有%d个轮子,时速为:%dkm/h",p->wheels,p->speed);
return 0;
}
Person *p=[Person new];
Person *p2=p;
指针之间的赋值传递的是指针存储的地址,相当于C#中的引用传递
OC中类在内存中也占空间(在使用类创建对象之前,会将类加载进内存-只会加载一次)
而且OC中每个对象默认都有一个指针isa,指向创建对象的类
常见错误
只有类的声明,没有类的实现
漏了@end
@interface和@implementation嵌套(两个类的声明和实现不能嵌套)
两个类的声明嵌套
成员变量没有写在括号里面
方法的声明卸载了大括号里面
成员变量必须写在类中的大括号中,并且不能重名和初始化,而且不能在前面加上static等
类的声明必须放在前面(使用之前),实现部分可以放在后面
方法和函数的区别:
对象方法都是以减号开头(-)
对象方法的实现只能写在@implementation和@end之间
对象方法的声明必须写在@interface和@end之间
对象方法只能由对象来调用
对象方法归类\对象所有
函数能写在文件中的任意位置(不能写在类的声明部分@interface和@end中间),函数归文件所有
函数调用不依赖于对象
函数内部不能直接通过成员变量访问某个对象的成员变量
如果在类的声明中有方法的声明,但是在实现的时候写成了函数,那么就会认为没有实现这个方法。
方法的声明与实现:
//OC方法中,一个参数对应一个冒号(冒号前面可以写点描述的东西)
- (int) pingFang:(int) num;//方法名叫:pingFang:(冒号也算在方法名之内)
两个参数
- (int) sum:(int)num1 :(int)num2;
调用的时候:
int a=[jsq sum:10 :5];
推荐写法:
- (int) sumWithNum1:(int)num1 andNum2:(int)num2;//方法名:sumWithNum1:andNum2:
int a=[jsq sumWithNum1:10 andNum2:20];
多个参数也这么写
冒号也是方法名的一部分
在同一个类中不允许两个对象方法同名
方法名:
方法调用:
多个参数的方法声明:
多个参数的方法的调用:
匿名对象:
不要写类似的匿名对象这样的代码(会造成内存泄漏):
只要求能说出输出的结果
[Car new]->speed=300;
[[Car new] run];
ios文档:
安装方法1:将docset文件放到/Xcode.app/Contents/Developer/Documentation/DocSets路径下
安装方法2:放到硬盘某个路径
/Users/pcbeta/Library/Developer/Shared/Documentation/DocSets
如有不对的地方还请大家指正!!