为游戏接入ios sdk的oc学习笔记
开发手机游戏,需要接入ios的sdk,截止2021年7月23日虽然swift已经推出一些年头,但对于大部分的渠道sdk,还是oc的代码。
oc不仅仅用来开发ios,还是mac上的app开发语言
从新手到入门
新手教程
object c的简写是objc,很多类都是NS开头,这是乔布斯离开苹果后自己创立的NeSt公司的简写
基础知识:.mm是objc++的代码,.cpp是C++的代码,.m是objc的代码,.h是头文件,只写接口
objc语言新手教程《Objective-C基础教程:1天玩转Objective-C语法》,在1天看完后心里大概有个语言的概念
对objc有一个比较全面的认识之后,可以看这篇《Objective-C 简介》
在windwos上运行objc,会是比较麻烦的一件事,而且没有优秀的IDE,不建议
先写定义,再写实现,放在两个文件中,也可以通过xcode新建cocos则会创建出这两个文件来
xcode编写objc的感受
在xcode可以新建控制台项目,用来学习objc语言,还是非常合适的。在编写代码的过程中,对于代码中的编译错误,xcode的提示还是很全面并且很及时,但是他没有像rider那样按下Alt+Enter就可以修复一些明显的代码错误。
一些疑问
是不是引用类型,创建出来的实例都要加上*? 比如:
Person *ZhangSan=[[Person alloc] init];//创建一个对象
[ZhangSan displayWithDriveHours:10]; //调用对象的方法,传入10
Q:为什么C#引用其它的文件,不需要using,而c++和lua,python都需要import?
A:C#是把同一个namespace编译到一个dll,而lua,python是单个文件,c++还在学习中
Q:id动态类型,是不是从当前文件中查看方法?是从当前类型中去查找方法
Q:NSArray中,初始值是@"1",@"2",但是打印出来却是整形,直接取值出来也是整形,这点和C#的差别比较大,是怎么实现的?
Q:sdkxxx.framework中有个info.plist,然后sdk的最上层也有一个info.plist,这两个是和安卓中的manfest一样,打包时会自动合并?
oc语言checklist
开发工具AppCode,XCode
.h和.m都是以@end结束
类方法+,可以理解为C#中的static,对象方法-就是实例的方法
oc中的发送消息,就是其它语言中的调用方法
oc中对象的初始化(分配内存),[[Class alloc] init],对应C#的new Class()
oc中方法的调用格式[实例对象 方法名],对应C#中的.
oc中方法的调用格式[实例对象 方法名:参数1值 参数1名称],对应C#中的.
只有一个参数的情况:[ZhangSan displayWithDriveHours:10];
“^”是block代码块的标志,可以理解为局部函数,或C#中的Action
+类方法(static),-对象方法(普通方法)
接入sdk时,用到很多的block代码块的方式来写代码
编译方式不一样,C#是编译到程序集(dll),oc是静态链接库(需要补充知识)
oc的数据结构
oc中基础框架的代码是在Foundation.h中导入了其它头文件(.h),比如数组,字典,字符串,文件类,日期类,线程类等一系列编程的基础元件。
NString* str = @"";
BOOL
NSArray 不允许存int ,float ,nil,nil就是结束,那么怎样存整形数组??
NSMutableArray 可变类型的数组,有增加和删除方法
NSDictionary 字典,oc中的基础类型都不能当键和值?必须要把它们转成对象才可以使用,那这样不科学啊C#中没有这个限制
字典来看,是先添加value再添加key
NSMutableDictionary可变类型字典
NSNumber类实现的功能是C语言中的基本数据类型和OC对象相互转换,转换之后就可以把int放到NSArray中了
用的最多的数据类型
NString,NSDictionary ,NSArray,NSNumber(包裹类,数据类型转换)
语言特性
通知addObserver:self 添加监听,可以理解为C#中的Action/event,移除事件removeObserver。从sdk代码来看 return self这个返回结果不是必须的
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(对象) name:@"事件名?" object:nil]
forKey, valueForKey
KVO:Key-Value-Observer,可以理解为当键值发生改变时的事件,这个功能在C#中通过事件系统就可以实现。
NSPredicate 谓词(过滤器),有点像C#中的Linq用来写条件筛选数据
plist文件,它的全称是:Property List。这种文件保存数据的特点就是只能保存:NSString、NSArray、NSData、NSDate、NSDictionary、BOOL、NSNumber这几种数据类型。
方法创建和调用
文档:http://c.biancheng.net/cpp/html/3196.html
//类方法的创建:
+(int)personWithA1:(float)a1 andA2:(NSString*)a2; //a1,a2分别代表两个参数
//对象方法的创建:
-(int)personWithA1:(float)a1 andA2:(NSString*)a2;
//“+”“-”号的不同是区分它们的一个标志,两种创建类方法不同之处的重点是调用对象的不同:
//调用类方法
[Person personWithA1:2 andA2:@"类方法"];//调用对象是类名
//调用对象方法
Person * obj1=[[Person alloc]init];
[obj1 personWithA1:1 andA2:@"对象方法"];//调用对象是类对象
return 0;
“^”block代码块
可以理解为是C#中的Action
普通的函数定义
-(void)displayWithDriveHours:(int)hours{
self.car.driveHours+=hours;
}
^block代码块的定义
void (^helloWorld)(void);
helloWorld=^(void){
NSLog(@"Hello World!");
};
helloWorld();
第1行(^helloWorld)这个是代码块的声音,第1行前面的void是返回类型,后面的(void)是参数,如果是int则写成(int arg1,int arg2)
第2行开始是代码块的实现,^必须要有
block实现和定义写在一起的情况
#import <Foundation/Foundation.h>
int number=10;
int main(int argc, const char * argv[]) {
__block int i=10;
void(^block)()=^{
NSLog(@"The i is :%d",i);
NSLog(@"The number is :%d",number);
i++;
number++;
};
block();
NSLog(@"The i is :%d",i);
NSLog(@"The number is :%d",number);
return 0;
}
接入ios sdk未用到的知识
typedef 用于简化block代码块,未用到
writeToFile:path 文件读写,未用到
@protocol 协议,没有父类,有点像C#的接口,未用到 http://c.biancheng.net/cpp/html/3204.html
类别,未用到,不太像C#中的抽象类,有点像扩展类partical?,它可以只给父类添加方法而不影响子类 http://c.biancheng.net/cpp/html/3203.html
NSUserDefaults 用户默认设置,可以用来保存用户登录的用户名,查看SDK中不包含这个
内存管理
自动引用计数:ios和mac两种开发都支持。(Xcode4.2之后才可以使用,简称:ARC(Automatic Reference Counting),ARC是Mac OS X 10.7和iOS 5 引入的新的内存管理方式)
他人学习资料
C#中方法调用是静态的,绑定发生在编译时 (暂时忽略动态编译)。Objective-C 消息则在运行时动态绑定对象,而非编译时。这意味着你可以发送任意定义好的消息给对象,编译器都不会报错。错误会在运行时抛出
这个需要查看C#的IL代码,再做评论
unity与ios交互
在unity中函数定义,生成xcode工程时,会生成对应的空方法, 在oc中写方法的实现,可查看《Unity接入IOS SDK笔记》
开发ios插件文档:https://docs.unity3d.com/cn/current/Manual/PluginsForIOS.html
oc中调用unity的方法UnitySendMessage(gameobject名字,方法名,参数)
为游戏接入ios sdk的oc学习笔记的更多相关文章
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现
一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create ...
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
一.创建文件~ MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...
- IOS开发-OC学习-protocol(协议)
在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法. 例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法:学 ...
- IOS开发-OC学习-Info.plist文件解析
Info.plist文件是新建ios项目完成后自动生成的一个配置文件,在Xcode中如下图: 通过解析可以获得配置的具体细节,解析过程如下: // 定义一个nsstring用来获取Info.plist ...
- IOS开发-OC学习-MD5加密
MD5的全称是Message-Digest Algorithm 5. MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数.数据 ...
- IOS开发-OC学习-Foundation框架练习
OC语言Foundation框架中字典.字符串.数组的应用: NSString *string = @"China|Usa|France"; NSArray *array = [s ...
- IOS开发-OC学习-NSTimer的使用
上一篇博客中在改变属性值的时候使用了timer进行自动改变.关于NSTimer的更详细的用法如下: 定义一个NSTimer类型的timer,和一个count,其中timer是定时器,count是计数的 ...
随机推荐
- 音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 国内数字音乐市场正在保持稳定增长. 根据华经产业研究院数据报告显示,2020 年数字音乐市场规模为 357.3 亿元,到 ...
- Java 轻量开发框架 Solon 1.4.4 发布 ,完善分布式任务规范
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- Neo4j Neo.TransientError.General.MemoryPoolOutOfMemoryError
The allocation of an extra 4.0 MiB would use more than the limit 2.0 GiB. Currently using 2.0 GiB. d ...
- Mindjet MindManager 拖动页面
常规的软件是按住空格建+鼠标左健 进行拖放,但 MindManager 不支持,如何对Mindjet MindManager 拖动页面? 按住 鼠标右键 直接拖拽 配合 Ctrl+滚轮 放大缩小,一起 ...
- Hugging News #0918: Hub 加入分类整理功能、科普文本生成中的流式传输
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 多图预警,DreamBooth 微调黑客松结果发布啦!
去年 12 月底,我们面向全球的开发者举办了 DreamBooth 编程马拉松活动.通过 DreamBooth,你可以使用少量的图像对文生图模型进行微调,将你「喂给」模型的图片信息进行命名,就可以通过 ...
- 4个工具,让 ChatGPT 如虎添翼!
LightGBM中文文档 机器学习统计学,476页 机器学习圣经PRML中文版 经典著作<机器学习:概率视角 让 ChatGPT 如虎添翼! ChatGPT 很好用,其核心是prompt的运用, ...
- SAP搜索帮助的限制值范围样式
样式一: 点击下拉框,输入筛选数据,筛选搜索帮助列表 样式二: 点击漏斗,输入筛选数据,筛选搜索帮助列表 参数设置: 不同的样式,通过账号的参数设置决定 第一种样式:没有配置F4METHOD,或者配置 ...
- Python 3.12 抢先看——关于 f-string 的改动
Python 3.12 抢先看--关于 f-string 的改动 哈喽大家好,我是咸鱼 相信小伙伴们对 python 中的 f-string 都不陌生 f-string 是格式化字符串的缩写,是以小写 ...
- 灵魂拷问std::enable_shared_from_this,揭秘实现原理
参考博客: std::enable_shared_from_this原理浅析 引言 在C++编程中,使用智能指针是一种安全管理对象生命周期的方式.std::shared_ptr是一种允许多个指针共享对 ...