码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C:03_面向对象-类和对象

时间:2014-09-19 18:53:15      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   strong   

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];
        
    多个参数也这么写
    冒号也是方法名的一部分
    在同一个类中不允许两个对象方法同名
    方法名:
    bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣
bubuko.com,布布扣
    
方法调用:
    bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣
bubuko.com,布布扣
 
    
多个参数的方法声明:
    bubuko.com,布布扣bubuko.com,布布扣
 
多个参数的方法的调用:
    bubuko.com,布布扣bubuko.com,布布扣
 
匿名对象:
    不要写类似的匿名对象这样的代码(会造成内存泄漏):
    只要求能说出输出的结果
     [Car new]->speed=300;
     [[Car new] run];
    
    
 
ios文档:
    安装方法1:将docset文件放到/Xcode.app/Contents/Developer/Documentation/DocSets路径下
    安装方法2:放到硬盘某个路径
            /Users/pcbeta/Library/Developer/Shared/Documentation/DocSets
 
 
 如有不对的地方还请大家指正!!

Objective-C:03_面向对象-类和对象

标签:style   blog   http   color   io   os   使用   ar   strong   

原文地址:http://www.cnblogs.com/yaofch107/p/3981855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!