类的声明和实现 oc

类的声明

  1. 完整地写一个函数:函数的声明和定义(实现)
  2. 完成的写一个类:类的声明和实现;
  3. 类的声明:@interface 类名   @end
  4. 类的声明 :@interface Car @end
  5. 类的实现:@implementation Car  @end;
  6. 类的声明:用来声明对象的属性(也叫成员变量)和行为;类的声明的大括号是用来声明对象的属性;
  7. NSObject让Car这个类具备创建对象的能力;它在Foundation框架中,所以要引入Foundation框架;

 

#import<Foundation/Foundation.h>
@interface Car:NSObject   // 其中Car是一个类,它的父类是NSObject
{

    int wheels;//声明对象的属性;对象的属性写在大括号内;里面的属性称为成员变量;成员变量默认会初始化为0;大括号里面只能写属性;不能写行为;
    int speed;

}
@end
@implementation Car
{
}
int main()
{
//在OC中想执行一些行为就写上[中括号];需要行为执行者和行为名称;利用类来执行某个行为;
//执行了Car这个类的new行为来创建新对象;
[Car new];
}
  1. 创建对象就会分配内存;每个对象都有存储空间存放成员变量,都会自动初始化为0;我觉得这跟创建多个对象有关;
  2. OC中只能用指针来间接操作对象
  3. 每个对象通过类创建出来,都会具有类的成员变量;
  4. Car *p = [Car new];定义了一个指向Car类型的对象;p以后是指向Car类型的对象;
  5. [Car new]会创建一个新对象,并且会返回对象本身;(新对象的地址);OC对象的本质就是结构体;
  6. p->wheels =4;//给p所指向对象的wheels属性赋值;
  7. p->speed = 250;//
  8. 成员变量也叫实例变量;对象里面的属性默认是不允许指针直接访问;需要加上@public在前面;
  9. @public可以让外部的指针间接访问对象内部的成员变量(实例变量);
{
@public
int wheels;
int speed;
}
  1. Car *p2 =[Car new];又创建一个新对象;
  2. .
  3. 给车子加上一些行为(功能),我们c语言一般指的是函数;
  4. 行为也叫方法;=功能
  5. @interface的大括号里面只能写属性;方法写在大括号外面;
  6. 方法的格式:方法名;参数;返回值;和函数类似;方法也是分(声明和实现的);
  7. //只要是OC对象的方法,必须以减号开头;
  8. //OC方法中任何数据类型都必须用小括号()扩住;
  9. //OC方法中的小括号,只能用来扩住数据类型;例如(void)
  10. OC方法和函数不一样;
  11. - (void) run;//类方法的声明;
  12. NSObject是一个类;要调用这个类,需要引入Foundation框架;
  13. %p指的是地址;一个指针的大小是8个字节;
方法的实现
  1. 类的实现就是写方法的实现;方法的实现就是说清楚方法里面有什么代码;
  2. 如果要执行方法或行为,需要写中括号【】;[p run]给p指向对象发送一条run消息;
  3. 具备创建对象的能力;
    @interface 类名  :NSObject
    {
        成员变量;
        成员变量;
    }
    方法声明;
    方法声明;
    方法声明;
    @end
    @implementation 类名
    -(void)walk
    {
        NSLog(@"走了一段路");
    }
    @end
    int main()
    {
    return 0;

    }
  1. 每一个对象都会占用存储空间;每次调用类的时候,会将类放到内存中;类从头到尾只占据一份存储空间;
  2. 在使用类创建对象之前,会将类加载进内存;
  3. 每个对象内部默认都会有一个isa指针,这个指针指向这个对象的类;
  4. 通过isa指针,我们可以知道我们可以调用哪些方法;
  5. OC里面的对象不会自动回收的;

  1. @interface就好像暴露在外面的钟表面;
  2. @implementation就号线个隐藏在时钟内部的构造实现;
  3. 常见错误:
  4. 在interface里面声明的成员变量不允许赋值;不能写成static int wheels;
  5. 不能用static修饰成员变量和方法;
  6. 方法的声明必须放mian前面,但是实现不必要;

方法和函数的区别;

  1. 以 -  开头都是对象的方法; 
  2. 对象方法的声明必须写在@interface和@end之间;
  3. 对象方法只能有对象来调用,因为对象方法只归类或对象所有;
  4. 函数能写在文件中的任意位置(除了@interface和@end之间;);函数归文件所有;
  5. 函数和对象一点关系都没有;函数不能写在@interface里面;
  6. 函数不能通过对象的变量名来范围对象的变量;
  7. 函数可以写在@implementation里面如:
@implementation Car
void test()
{
NSLog(@"调用了test函数");
}
-(void)run
{
test();
NSLog(@"%d个轮子的车跑起来");

结构体在变量的同时才能够赋值;

 
练习:
  • 学生:成员变量:性别、生日、体重、最喜欢的颜色、狗(体重、毛色、吃、跑);
  • 方法:吃、跑、遛狗(让狗跑)、喂狗(让狗吃)
原文地址:https://www.cnblogs.com/williamliuwen/p/5368947.html