oc

Swift基础学习笔记

故事扮演 提交于 2020-02-25 13:01:06
1、在学基本语法之前,简单看一下与OC的不同   注释:OC #pragma marks 视图加载完成      Swift //MARK: 视图加载完成          //TOOO:设置背景颜色(Xcode 8.0 特有)        //FIXME:更改头像   创建一个视图View:       OC [[UIView alloc]initWithxxx:]; Swift UIView(xxx:) 类名() == alloc/init 等价   类方法:       OC [UIColor redColor];       Swift UIColor.red       2.0  UIColor.redColor   访问当前对象的属性,Swift可以不使用self.:    OC [self.view addSubview:v];       Swift  view.addSubview(v)       建议:都不用,在编译器提示的时候再添加,会对语境有更好的体会     原因:闭包(类似OC block),需要使用self.   没有";"      ";"目的分割语句的,在Swift中,默认不需要   枚举类型:       OC UIButtonTypeContactAdd Swift ‘.’contactAdd   监听方法     OC @selector

简单谈谈OC与Swift的异同

て烟熏妆下的殇ゞ 提交于 2020-02-25 12:59:48
Swift,苹果于2014年 WWDC (苹果开发者大会)发布的新开发语言,可与 Objective-C *共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。 目前已经更新到Swift2.0,即将发布3.0版本.听说有很大的变动呢.现在我们先来了解一下Swift与OC基础的小异同(不过如果要说它与OC有什么不同,感觉很不同啊~~~) 1.输出日志不同 2.常量变量定义不同,swift 类型的长短比OC更精确,swift是类型安全的语言,swift不允许隐式转换,但是可以显示转换 3.运算符:+ , - , * , / ,%, ++,--,OC和swiftch除了取模运算符,其他用法都一样,OC取模必须是整数,swift取模可以是小数,swift不可以连续赋值,但是OC可以 4.分支 @1 1)、if后的括号可以省略 2)、if后只能接bool值 3)、if后的大括号不能省略 @2 swift和OC的循环差不多,但是swift,for后括号可以省略 @3 1)while循环:while后的括号可以省略,只能是bool值作为条件语句 2)OC中有do-while,swift中do是用来捕获异常的,swift里用repeat-while 4.swift里有元组,OC木有 5.swift的nil和OC有些不一样,OC只有对象可以用nil,swift基础类型(整形

OpenShift 4 之 Quarkus(2)使用S2I部署Quarkus应用

末鹿安然 提交于 2020-02-24 10:45:32
文章目录 将Quarkus源码按可执行程序部署到OpenShift 将Quarkus源码按Java应用部署到OpenShift 我们除了可以参考《 OpenShift 4 之 Quarkus(1)创建第一个Quarkus应用 》部署由Quarkus编译生成的可执行程序外,还可以通过OpenShift提供的针对Quarkus提供的S2I功能自动从应用源码完成在OpenShift上的应用部署。 将Quarkus源码按可执行程序部署到OpenShift 以下过程的部署的应用是https://github.com/quarkusio/quarkus-quickstarts.git#getting-started中的Quarkus应用代码,构建过程使用的Builder-Image是quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java8(也可以用quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java11)。 # To build the image on OpenShift $ oc new-project quarkus-quickstart-native $ oc new-app quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java8~https:/

OC面向对象—多态

£可爱£侵袭症+ 提交于 2020-02-24 06:15:51
OC 面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。 Animal 类的声明 Animal 类的实现 Dog 类继承自 Animal 类 Dog 类的实现 测试程序: 二、使用注意 代码分析: Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗? NSString *str=[Dog new]; 狗是一个字符串?正确吗? Oc 语言是一门弱语法的语言,编译的时候并不会报错,所以这就要求我们在实际的开发过程中一定要按照既定的规范来写代码,不要出现狗是一个字符串这样的问题。 多态的好处: 需要一个新的函数专门用来喂狗 Void feed(Dog *d) { [d eat]; } 如果这个时候也需要喂猫,那就应该重写新一个新的函数 Void feed(Cat *c) { [c eat]; } 而狗和猫实际上都继承自动物这个类,在这里就可以使用多态来简化代码了。 这里只需要把函数的参数写成是 Animal * 类型的,那么 Dog 和 Cat 类型的对象就都可以传入进来。 调用的时候直接改变参数就可以了。 多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。 不建议的做法 ~ Animal *a=[

OC与JS的交互(iOS与H5混编)

给你一囗甜甜゛ 提交于 2020-02-10 07:05:47
大神总结WKWebView的坑: https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA 在开发过程中,经常会出现需要iOS移动端与H5混编的使用场景。 iOS中加载html网页, 可以使用UIWebView或WKWebView. 本篇博客将介绍两种控件使用过程中如何实现OC与JS的交互。 UIWebView delegate 协议方法 //网页即将开始加载 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; //网页开始加载 - (void)webViewDidStartLoad:(UIWebView *)webView; //网页加载完成 - (void)webViewDidFinishLoad:(UIWebView *)webView; //网页加载失败 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; //UIWebView自带了一个方法, 可以直接调用JS代码(转化为string类型的js代码)

iOS进阶一OC对象的本质

喜欢而已 提交于 2020-02-06 01:43:39
OC对象的本质 平时编写的Object-C代码,底层实现其实都是C/C++代码。 所以Objective-C的面向对象都是基于C/C++的数据结构实现的 ,OC对象内部可以容纳不同数据类型的数据,因此可以推断 OC对象的底层数据结构就是结构体 。 为了进一步研究OC对象的本质,我们使用苹果Xcode内置的LLVM编译器前端clang中 -rewrite-objc 将我们的OC代码转为C/C++实现。 clang -rewrite-objc main.m -o main.cpp 由于不同平台支持的代码肯定是不一样的,目前我们关注点是iOS开发,建议在将OC代码转成C/C++代码指定平台 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cpp 通过生成的C/C++代码,我们编写的OC对象NSObject的底层实现为: typedef struct objc_class *Class; // NSObject的底层实现 struct NSObject_IMPL { Class isa; }; NSObject在内存中布局就是一个指向struct objc_class类型结构体的指针isa。 由于内部就一个成员,那么isa的地址就是NSObject结构体在内容中的地址 获取对象实例在内存中内存空间大小

IOS 内存管理

我只是一个虾纸丫 提交于 2020-02-04 03:03:11
小议iphone内存管理与属性 一、前言 对于大多数从C++或者JAVA转过来学习Object-C(以下简称OC)的人来说,OC这门语言看起来非常奇怪,用起来也有点麻烦。 OC没有像JAVA一样的垃圾回收机制,也就是说,OC编程需要程序员手动去管理内存。这就是为什么它烦的原因,苹果却一直推崇开发者在有限硬件资源内写出最优化的代码,使用CPU最少,占用内存最小。 二、基本原理 对象的创建: OC在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针,因此出来基本类型以外,我们在OC中基本上都在使用指针。 ClassA *a = [[ClassA alloc] init]; 在[ClassA alloc]的时候,已经发送消息通知系统给ClassA的对象分配内存空间,并且返回了指向未初始化的对象的一个指针。 未初始化的ClassA对象接手到init消息,init返回指向已初始化后的ClassA对象的一个指针,然后将其赋值给变量a。 在创建并使用完一个对象的时候,用户需要手动地去释放该对象。 [a dealloc]; 如果指针a和b同时指向堆中同一块内存地址 ClassA *a = [[ClassA alloc] init]; ClassA *b = a; [a dealloc]; 当执行到第三行的时候,指针b就成了无头指针。这是一个在C++中也是常见的错误,我们需要避免这类错误

OC的runtime运行机制

ぐ巨炮叔叔 提交于 2020-02-04 00:25:36
什么是runtime runtime就是一套底层的c语言API(Application Programming Interface)里面包括很多强大实用的c语言类型、c语言函数。 实际上,平时我们编写的oc代码,底层都是基于runtime实现的。 也就是说我们平时编写的oc代码最终都是转成了底层的runtime代码(c语言代码) 。 [obj say] —> 调用id objc_msgSend(id self, SEL op, ...)函数 -> 里面的obj.isa指针-> class -> class.cache_List -> class.Method_List -> superClass 例如 [obj say] ; 像这样对象执行一个方法的时候转成了runtime库里面的C语言函数即 objc_msgSend(objc, @selector(say)) 内部对象寻找到方法并执行的具体步骤: MRC开发环境下 1.先检查 @selector 方法是否可以省略 2.检查 target(目标对象objc) 是否为 nil,如果为 nil 就 clearout 并直接 return 3.找到 target 对应的class,然后根据 @selector 找到IMP(函数指针) 4.先从当前class的一个方法名叫cache_List缓存列表去找,找到就跳到对应的IMP实现方法

Runtime-iOS运行时基础篇

孤街浪徒 提交于 2020-02-04 00:16:54
转自:https://www.jianshu.com/p/d4b55dae9a0d   本文主要整理了Runtime的相关知识。对于一个iOS开发者来说,掌握Runtime的重要性早已不言而喻。OC能够作为一门优秀的动态特性语言,在其背后默默工作着的就是Runtime。在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够融入自己的理解,从简单的问题出发,一步一步理解和学以致用。 iOS运行时Runtime.png 相关文章:iOS运行时Runtime应用 目录: 一、怎么理解OC是动态语言,Runtime又是什么? 二、理解消息机制的基本原理 三、与Runtime交互的三种方式 四、分析Runtime中的数据结构 五、深入理解Rutime消息发送原理 六、多继承的实现思路:Runtime 七、最后总结 一、怎么理解OC是动态语言,Runtime又是什么? 静态语言 :如C语言,编译阶段就要决定调用哪个函数,如果函数未实现就会编译报错。 动态语言 :如OC语言,编译阶段并不能决定真正调用哪个函数,只要函数声明过即使没有实现也不会报错。 我们常说OC是一门动态语言,就是因为它总是把一些决定性的工作从编译阶段推迟到运行时阶段。OC代码的运行不仅需要编译器,还需要运行时系统(Runtime Sytem)来执行编译后的代码。 Runtime是一套底层纯C语言API

OC-内存管理-NSTimer

风流意气都作罢 提交于 2020-01-31 05:34:07
NSTimer 就是我们的定时器 可以满足我们很多业务需求 ,但是它会带来内存泄漏的隐患. 场景:在一个VC中设定一个全局定时器定时打印log,需要在pop该VC的时候 清除定时器 减少内存泄露 解决如下: 001 生命周期 处理 - ( void )didMoveToParentViewController:(UIViewController *)parent{ NSLog(@"didMoveToParent==%@",parent); //parent 就是当前的视图控制器的UINavigationController if (parent == nil ) { [ self .timer invalidate]; self .timer = nil ; } } 002 设置消息转发 @property ( nonatomic , strong ) id target; class_addMethod([_target class], @selector(fire), (IMP)fireImp,"V@:"); self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:_target selector:@selector(fire) userInfo:nil repeats:YES]; [[NSRunLoop