Objective-C或者Obj-C或OC,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。  用于MAC App开发、IOS App开发,主要开发工具是MAC上的XCode IDE。

 

下面简述一下Object C要点:

  • 1983年, object-c诞生了,Objective-C可以认为是继承了C和Smalltalk优点。
  • 1996年,苹果公司以4亿美金收购了NeXT,NeXTSTEP被重命名为Cocoa因为Mac OS X、iPhone SDK、Xcode可追 溯到NeXT、NeXTStep,所以是以Objective-C为主力开发语言,所以程式码中会出现NX***与NS***字样
  • 目前使用Objective-C 2.0为开发语言,使用Xcode 7作为集成开发环境
  • OC有一套预定义的类和类型比如NSNumber,NSstring,NSdate等。NSObject是一个根类(类似C#的Object)
  • 子类 :父类

    @interface MyObject : NSObject
    @end

    C++中:
    class MyObject : public NSObject{
    };

    备注:类声明以 @interface 类名:继承类 开头,以 @end 结尾,类实现以@implementation 类名 开头,以 @end 结尾

  • NSLog相当于printf() 
         NSLog(@"hello Objective-C");
  • 类方法和实例方法,加号表示类方法,类方法可以直接调用,而不用创建实例(C# static方法);减号表示实例方法,需要创建这个类的实例对象才可以调用

    中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。 
     
    this.hello(true);   //C#
    [self hello:YES];   //Objective-C

         OC中所有对象都是指针的形式。

  • OC用self代替this。
  • OC使用id代替void*
  • OC使用nil表示NULL
  • OC只支持单继承
  • OC使用YES/NO表示TRUE/FALSE
  • OC使用#import代替#include
  • OC的用户界面是XIB文件,一个XML封装的UI
      归档存储:(沙河路径)

    方法1:NSKeyedArchiver、NSKeyedUnArchiver

    方法2:CoreData
      常用数据结构:数组和字典
      NSArray、NSMutableArray
      NSDictionary、NSMutableDictionary
        重绘触发函数:[self SetNeedDisplay]
        Main函数:
        入口路径:Main() –> UIApplication –> DidFinishLaunching (初始化函数地方)

        //在Objective-C 2.0引入了属性合成,相当于之前的get/set方法 
        @property (nonatomic, copy) NSString *caption; 
        @property (nonatomic, copy) NSString *photographer;

         

        Object C单体(单例):

        *.h文件

        #import <Foundation/Foundation.h>

        #import <UIKit/UIKit.h>

        @interface BNRImageStore : NSObject

        +(instancetype)sharedStore;

        @end

         

        *.m 文件

        #import "BNRImageStore.h"

        #import "BNRItemStore.h"

         

        @interface BNRImageStore ()

        @property(nonatomic, strong) NSMutableDictionary *dictionary;

        @end

         

        @implementation BNRImageStore

        +(instancetype)sharedStore

        {

        static BNRImageStore* sharedStore = nil;

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

        sharedStore = [[self alloc]initPrivate];

        });

        // if (!sharedStore) {

        // sharedStore = [[self alloc]initPrivate];

        // }

        return sharedStore;

        }

        -(instancetype)init

        {

        @throw [NSException exceptionWithName:@"Single" reason:@"use + [BNRImageStore sharedStore]" userInfo:nil];

        return nil;

        }

        -(instancetype)initPrivate

        {

        self = [super init];

        if (self) {

        self.dictionary = [[NSMutableDictionary alloc]init];

        //内存过低警告

        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

        [nc addObserver:self selector:@selector(clearImages:)

        name:UIApplicationDidReceiveMemoryWarningNotification

        object:nil];

        }

        return self;

        }

         

        *.m文件和*.mm文件区别

        *.m文件是OC编程用的,*.mm文件是混合编程(OC\C++). 例如接入IOS支付的时候,针对一个编译问题:

        很可能你是在混编文件(也就是.MM)里调用的CreateRSADataSigner方法

        解决办法 就是DataSigner.m和DataVerifiler.m

        把这两个类改为MM文件,C++和OC混编。

         

        参考材料:

          *《IOS编程–第4版本》, Big Nerd Ranch Guides 的书,一向是很经典的,强烈推荐

          * 拿XCode实战写代码,有5年编程经验的,大约写一周,就慢慢就感觉了 — 精通还得3月,呵呵。

         

        2014.6 Swift横空出世,且apple说2015年,Swift要开源。 故,Object C的未来,不好说。

        以苹果的个性,说不定2年后,要求Apple Store上面的应用全部为Swift的,也说不定,呵呵。