zoukankan      html  css  js  c++  java
  • objective-C 2.0

    NEXT software公司开发了一套基于Unix的操作系统以及cocoa开发环境,后被苹果公司收购。

    objective-C五大特性:

    • 完全兼容C
    • 面向对象
    • 单继承(OC里的函数均为虚函数、通过类别和协议实现伪多继承)
    • 动态绑定(dynamic_cast 把基类指针转化为子类指针的时候会自动做判断、ID类型 表示任意类型的对象,实现动态绑定)
    • 消息机制(SmallTalk语言 解决空指针错误崩溃)函数基于消息机制,发消息再调用函数
    #import <Foundation/Foundation.h>
    
    //:表示公有继承
    @interface Person : NSObject
    {
        //属性,实例变量,默认权限为protected
        int age;
        //对象声明时必须使用*
        NSString * name;
    }  
    //生成set和get方法,nonatomic表示非多线程,assign直接赋值,strong强引用 weak弱引用 retain copy,若自己重写set,get方法会自动覆盖系统生成的默认方法,还可增加readonly属性使其只生成get函数,新的编译器甚至支持省去实例变量的声明和@systhesize
     @property (nonatomic,assign) int age; // - 表示实例的方法(消息),+ 表示类的方法(消息)static - (void)eat;
    - (void)setName:(NSString *)nameValue;
    @end
    #import "Person.h"
    
    @implementation Person
    
    @synthesize age; - (void)eat { NSLog(@"eat function called"); } - (void)setName:(NSString *)nameValue { if (nameValue) { //1.指针不能直接赋值,否则释放时会出现问题 2.stringWithString 方法实现NSString对象的初始化 if (name != nameValue) { name = nil;
              name
    = [NSString stringWithString:nameValue]; } } } @end
    #import "Person.h"
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
            //alloc为+方法即类方法,init为-方法,用类方法创建的对象会被添加到自动释放池,用实例的方法创建的对象,需要手动的去释放。
            Person * p = [[Person alloc]init];
            
            [p eat];
            //oc字符串必须以@开头
            [p setName:@"yangjing"];
        }
        return 0;
    }
    • OC中无引用 
    • %@占位符表示对象
    • OC中数组不会默认初始化为零
    • 使用.运算符可以自动调用set,get方法
    • OC可以使用C风格的函数
    • OC函数名相同,参数个数不同可以重载,但若仅有参数类型不同则不能重载!因为OC通过参数的标签识别函数重载(即可以使用参数标签实现与C++类似的函数参数个数相同类型不同的函数重载)
    • 注意如果不声明实例变量而直接使用@property生成的是备份变量名,直接调用时记得在变量名前加下划线或使用self.或[self ]调用
    • self和this的区别:this永远是当前对象的指针不可以改变,而self可以修改它的值因此未必一定指向当前对象,在使用时要注意。
    • 前置声明@class和包含头文件不同,它只是声明这是个类不清楚类的结构,用于在.h文件中声明指向对象的指针,在.m文件引用其方法时仍需import
    • 不使用arc(自动释放内存)机制时需析构函数dealloc。当一个对象释放[p release]时和对象的引用计数器值为零时自动调用dealloc释放内存
  • 相关阅读:
    横竖屏判断及禁止浏览器滑动条
    sinablog to cnblogs
    qml 3d 纪念那些曾经爬过的坑
    opencv 学习一安装环境vs2015+opencv3
    vs2015 调试 无法启动程序
    qtableview 表格风格设置
    qt 给父窗体设置样式不影响子控件样式以及子控件设置透明
    Qt ASSERT:"QMetaObjectPrivate::get(smeta)->revision>= 7"in file kernelqobject.cpp,line 2646
    cmake 学习-cmakelists.txt
    CMake学习- 使用批处理设置编译环境
  • 原文地址:https://www.cnblogs.com/jenayfighting/p/5339351.html
Copyright © 2011-2022 走看看