超牛链AI Logo

超牛链博客: 读书|骑行|笔记分享
user
老王不响
@关于博主
2015-11-21

Unity3D项目实战笔记(8):Object C语言 - “一瓶酿了30年陈年老酒 10 mins read


   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的,也说不定,呵呵。

        2015-11-21
        老王 加冕为王
        老王,工作了19年的软件工程师、连续创业者、Blogger(since 2013),微软.net MVP获得者(2015~2016)、 Unity3D UVP获得者 (2017)。 曾任上市公司研发主管、知名外企Social Media Marketing 。 现专注于Instagram、SEO等海外社交媒体营销技术研究与实践。 四十而立的我,有2个可爱的宝宝,喜好骑行、读书、木工, 尤其喜好历史、科幻书籍。
        友情链接
        超牛链 57天前 2024年3月6日 15:16

        沙发留给真心支持的老朋友,等待你的加入

        超牛链 57天前 2024年3月6日 15:16

        老板大大的专业水平总是令人赞叹,期待每一次展现

        最新文章

        超牛链AI:Ollama本地LLM LangChain RAG小试--算力为王

        算力为王时代: CPU --> GPU

        GPU这...
        【发刊词】超牛链AI: hello world.

        ​公元2024年,比2023年的AI风暴,更加寒噤。

        《一句顶一万句》 遇见一个能说的上话的人不易

        2024年 甲辰龙年春节假期,我看了2本小说,茅盾文学...

        2023个人总结: AI、骑行、青椒炒肉丝

        后疫情时代,刚褪去口罩。又迎来经济消费降级,我的客户同...

        热门文章

        C#程序员整理的Unity 3D笔记(六):Git源码管理

        对程序员而言,写的代码用源码管理系统管理起来,非常方便...

        且行且思:记录一次西安城墙国际马拉松---8公里

        百度搜索,输入西安城墙马拉松,有7万2千个结果。 实际...

        骑行故事初心--自由的御风而行

        2023年,三年疫情过后第一个春天,我开始了骑行: 空...

        Unity3D for VR 学习(7): 360&deg;全景照片

            在VR应用中,有一个相对简单的虚拟现实体验,那...

        相关【技术杂谈】文章

        查看所有相关【技术杂谈】文章
        搭建Squid3 密码账号IP代理

        上文中,说明了 Squid3 IP Proxy 隐藏原IP,这里就搭建Squid 3密码账号IP代理进行整理,涉及...

        不用插件,js脚本显示星号密码

        不用插件,js脚本显示星号密码

        以前,我是用Chrome插件做这个这的--显示星号密码的。 今天,分享一个不用插件...

        执行MySQL报错

        今天新采购了柒比贰WordPress主题,安装主题时候报错: MySQL命令行使用sql语句进行建表时,MySQL...