作者:changmao三顾茅庐 | 来源:互联网 | 2023-08-24 08:37
ios开发的基础语言是什么ios开发使用的语言是objective-c(也称object-c,是基于C++的。iOS开发的标准语言是objective-c。是c的一种超集,它是对c
ios开发的基础语言是什么
ios开发使用的语言是objective-c(也称object-c),是基于C++的。
iOS开发的标准语言是objective-c。
是c的一种超集, 它是对c的扩展,支持面向对象编程。
像后来的一些高级语言java,c#等都借鉴了该语言的面向对象特性。 当然在iOS开发过程中,也支持c/c++语言与原生的objective-c混编。
扩展资料:
基本特点
Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。
Objective-C写成的程序通常不会比其原始码大很多。
而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。
虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。
iOS 开发基础(6)--网络通信
OSI 的七层协议体系结构的概念清晰,理论完整,当时它既复杂又不实用; TCP/IP 体系结构则不同,但是它现在却得到了非常广泛的应用,不过从实质上讲, TCP/IP 只是最上面的三层,因为最下面的网络接口层并没有什么具体内容;因此在学习计算机网络的时候往往采取折中的方法,即综合 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构; iOS 开发中的网络通信主要是在传输层和应用层进行一些网络 IP 地址,端口以及协议的一些处理;首先是网络层的两种传输协议 UDP 和 TCP 的含义以及区别: 用户数据包协议;UDP 在传输数据之前不需要先建立连接.远地主机的运输层在收到 UDP 报文后,不需要给出任何确认; 主要特点: 传输控制协议; TCP 提供面向连接的服务;在传输数据之前必须先建立连接,数据传输完成后要释放连接;建立连接需要通过三次握手,而释放连接需要四次握手; 主要特点: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
这个问题的本质就是信道不可靠,但是通信双方需要中间传输的数据是可靠的,而要解决这个问题,无论你是在信息中包含什么信息,三次通信是理论上的最小值,所以三次握手不是TCP本身的要求,而是为了满足在不可靠信道上可靠的传输信息这一需求所致的;这里的本质需求就是,信道不可靠,数据传输要可靠,三次握手之后你先继续握手还是发数据也好,跟进行可靠信息传输的需求就没关系了,因此如果信道可靠,无论什么时候发出消息,对方一定能收到,或者你不关心是否要保证对方收到你的消息,那就能像UDP那样直接发送消息就可以; 1.当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据接口(当然确认信号还是可以发),就会发FIN给主机B; 2.主机B收到A发送的FIN,表示收到了,就会发送ACK回复; 3.但是这时B可能还在发送数据,没有想要关闭数据口的意思,所以FIN和ACK不是同时发送的,而是等到B数据发送完,才会发送FIN给主机A; 4.A收到B发来的FIN,知道B的数据也发送完了,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接; 在客户端发送最后的ACK回复,但是该ACK可能丢失。服务端如果没有收到ACK,将不断重复发送FIN片段。所以客户端不能立即关闭,它必须确认服务端接收到了该ACK,客户端会在发送出ACK之后进入到TIME_WAIT状态,客户端会设置一个计时器,等待2MSL的时间,如果在该时间内再次收到FIN,那么客户端会重发ACK并再次等待2MSL;所谓2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。
如果知道2MSL,客户端都没有再次收到FIN,那么客户端推断ACK已经成功接收,则结束TCP连接; HTTP是一种无状态的连接,客户端每次读取web网页时,服务器都会认为这是一次新的会话。但有时候我们需要持久保存一些用户信息,比如登录时的用户名和密码等;而这些信息都是需要COOKIE和Session来保存; 这两个的本质区别就是COOKIE是保存在客户端的,而Session是保存在服务器上的; 当服务器接收到 COOKIE 后,会根据 COOKIE 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。
iOS开发之基础篇(5)—— NSNumber、NSValue
Xcode 8.2.1 前文说过,NSArray和NSDictionary只能存入OC对象。不信我们可以做个试验:将一个int类型或者是NSInteger放入NSMutableArray里面。
(NSInteger和int的差别:NSInteger会根据系统的位数32or64,自动选择int的最大数值int or long,这样我们就不用考虑设备是32位还是64位系统) 这样是会编译出错的,存入不成功。
那怎么办呢?所以,我们需要将int或者NSInteger类型转换成NSNumber(OC对象),然后再存入NSArray中。 NSNumber可以转换一系列的基础数字类型(char、int、float、long、bool等等),还提供了一个compare方法来将NSNumber对象进行数值排序。 我们来看看NSNumber有哪些要掌握的知识点: 运行结果如下: 之所以把NSNumber和NSValue放到同一篇,是因为NSNumber是NSValue的子类,NSValue除了能够包装NSNumber能够包装的基础数字类型外,还能够包装系统框架提供的CGRect/CGPoint/CGSize等数据结构,也可以是自己定义的struct。最终也能放入数组。
iOS开发基础之内存管理
使用引用计数的方式对创建的对象进行内存的管理操作;有强引用指向(retain)那么引用计数+1,强引用被置为nil(release)那么引用计数-1;对象超过作用域该对象的引用计数如果为0,则系统会清理对象占用的内存空间,目前内存管理的方式分为MRC和ARC两种. 当开发中遇到在某个作用域内部产生大量的autorelease对象导致内存激增,需要考虑手动创建autoreleasepool来释放局部变量的情况! 遇到这种情况,就需要排查控制器中出现的内存泄露了;
[iOS 开发基础]- 动态计算cell行高
这几天在网上搜寻技术文章时,上的文章总是很合胃口。于是就在上面注册了账号,上的文章都写的很精髓。
这是我第一次在上面写文章,多少有点小紧张,文章写的哪里不好,或者哪里有问题,欢迎大家提出来,我会修正。
好了这里就不继续瞎扯了,现在进入正题吧。 相信很多初级开发者们对于动态计算cell的行高都很头大,总是计算不好,导致各种问题。这里我就讲一下平时我是怎样计算行高的。有很多种方法,一种是通过约束来动态的计算行高,在《 UITableView自动计算cell高度并缓存,再也不用管高度啦! 》这篇文章里写的已经很详细了,这里就不详述了。
还有一种是提前计算行高保存到模型中,这里先看一下效果图;这样也实现了动态计算行高,每一个cell都返回不同的高度。具体操作是先将数据模型传入一个计算行高的模型当中,然保存这个模型到数据数组中。通过heightForRowAtIndexPath方法返回不同的行高。
当然单单这样笼统的说,相信大家也很难理解我在说什么,别急听我细细道来。 首先我们和往常一样险些数据模型,有头像,昵称,文章里容。 然后根据需求的布局,提前进行cell的行高计算,根据控件数量添加模型属性。
添加完成之后,要额外添加cell行高属性和数据模型数据。 这里我们就可以开始布局了,这里提前计算没个控件的frame,然后进行布局。 其实我们自定义cell 的时候,就是文字内容的不确定性,导致我们无法静精确的计算cell的行高。
但是我们可以通过这个方法来计算文字的高度。 然后在我们写数据数组时,将数据模型传入计算模型当中,像这样传入之后就可以返回行高了,在tableView的delegate的方法中返回不同的行高就行了。 之后在自定义cell的时候,将我们提前计算好的frame赋值给控件就可以了。 注意的是,Lable的文字大小要和提前计算好的大小一致 这样我们就完成动态的返回cell的行高了。
各位读者姥爷们,文章写的比较匆忙,哪里写的不好希望大家多多指点。