我是3年前的深圳前端开发培训经验了,当时是oc语言,现在肯定新语法了,要重新学习。想报培训班,想请教大家!

更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
举报视频:
举报原因(必填):
请说明举报原因(300字以内):
请输入您的反馈
举报理由需要输入300字以内
感谢您的反馈~
请勿重复举报~
请刷新重试~
收藏成功,可进入
查看所有收藏列表
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
IOS开发入门视频 3 8.OC4-点语法
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
30秒后自动关闭
IOS开发入门视频 3 8.OC4-点语法">IOS开发入门视频 3 8.OC4-点语法
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
热门短视频推荐
Copyright (C) 2018 & All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
后才可以领取积分哦~
每观看视频30分钟
+{{data.viewScore}}分
{{data.viewCount}}/3
{{if data.viewCount && data.viewCount != "0" && data.viewCount != "1" && data.viewCount != "2" }}
访问泡泡首页
+{{data.rewardScore}}分
{{if data.rewardCount && data.rewardCount != 0 && data.getRewardDayCount != 0}}1{{else}}0{{/if}}/1
{{if data.rewardCount && data.rewardCount != 0 && data.getRewardDayCount != 0}}
+{{data.signScore}}分
{{data.signCount}}/1
{{if data.signCount && data.signCount != 0}}
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制若无闲事挂心头,便是人生好时节
【IOS 开发学习总结-OC-6】objective-c 的数组
objective-c是C 语言的超级,直接使用了 C 语言的数组。
语法格式:type array[length],其中的 length 可以是个固定的整数也可以是整数变量或表达式。
定义数组时,如果没有对数组进行初始化,系统对数组元素赋值为默认的初始值。赋初始值的规则如下:
所有整型(包括字符型)的数组元素,系统默认赋值为0;
所有浮点型的数组元素,系统默认赋值为0.0;
所有指针型的数组元素,系统默认赋值为空
定义数组后,数组中元素在内存中是连续存放的。如定义 int arr[5]; 在内存中的存放机制如下图:
数组的初始化
语法格式为:type arrayName[length]={ele1,ele2,ele3,……,eleN};
- int arr[5]={3,2,1};//赋值时可以不全部赋值,前面给出的是前3个元素的初始值,其他为默认的初始值
- int arr2[]={1,3,5,7,9};// 所有元素都指定了初始值,可以省略掉长度
数组的使用
最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。数组初始化完成后,不能重新对数组本身赋值。如下代码是错误的:
arr={2,3};// 不能对数组本身赋值
objective-c 的数组索引从0开始。
数组下标越界的问题:
如果访问数组元素时,指定的数组元素索引号<0,或者>=数组长度,程序将出现无法预知的错误。因此,要避免数组索引越界的情况出现。
计算数组的长度的方法:
使用 sizeof 函数来计算:sizeof( 数组变量)/sizeof( 数组变量[0])
上面 的公式将返回数组元素的个数。
示例代码:
#import &Foundation/Foundation.h&
int main(int argc , char * argv[])
@autoreleasepool{
int len = 5;
int arr[len];
int arr2[5] = {2, 3, 40 , 300, 100};
int arr3[5] = {2, 3, 40};
int arr4[] = {2, 3 , 40};
NSDate * arr5[4];
char * arr6[] = {"李刚", "fkjava.org", "crazyit.org"};
NSString * arr7[4] = {@"疯狂iOS讲义" , @"疯狂Ajax讲义"};
NSLog(@"%s" , arr6[1]);
arr6[0] = "Spring";
NSLog(@"%d" , arr[5]);
for (int i = 0, length = sizeof(arr2) / sizeof(arr2[0]);
NSLog(@"arr2[%d] : %d" , i , arr2[i]);
for (int i = 0, length = sizeof(arr7) / sizeof(arr7[0]);
NSLog(@"arr7[%d] : %@" , i , arr7[i]);
arr[0] = 42;
arr[1] = 341;
for(int i = 0 , length = sizeof(arr) / sizeof(arr[0]);
NSLog(@"arr[%d]: %d" , i , arr[i]);
先看二维数组,语法格式:type arrayName[length][length],例如:float arr[2][3];
二维数组的本质依然是一维数组,只不过它的数组元素又是一维数组。
float arr[3][4]数组在内存中的存放示意图如下图:
类似的三维数组。
int arr[2][3][2] 在内存中的存储示意图。
示例代码:
#import &Foundation/Foundation.h&
int main(int argc , char * argv[])
@autoreleasepool{
int arr1[3][4] = {
{2, 20 , 10 , 4},
{4 , 100, 20 , 34},
{5 , 12 , -12 , -34}
for(int i = 0 ,length = sizeof(arr1) / sizeof(arr1[0]);
for(int j = 0 , len = sizeof(arr1[i]) / sizeof(arr1[i][0]);
printf("%d\t" , arr1[i][j]);
printf("\n");
NSLog(@"-----------------------------");
int arr2[3][4] = {
for(int i = 0 ,length = sizeof(arr2) / sizeof(arr2[0]);
for(int j = 0 , len = sizeof(arr2[i]) / sizeof(arr2[i][0]);
printf("%d\t" , arr2[i][j]);
printf("\n");
NSLog(@"-----------------------------");
int arr2x[3][4] = {
for(int i = 0 ,length = sizeof(arr2x) / sizeof(arr2x[0]);
for(int j = 0 , len = sizeof(arr2x[i]) / sizeof(arr2x[i][0]);
printf("%d\t" , arr2x[i][j]);
printf("\n");
NSLog(@"-----------------------------");
int arr3[][4] = {
{4 , 100, 20},
for(int i = 0 ,length = sizeof(arr3) / sizeof(arr3[0]);
for(int j = 0 , len = sizeof(arr3[i]) / sizeof(arr3[i][0]);
printf("%d\t" , arr3[i][j]);
printf("\n");
NSLog(@"-----------------------------");
int arr4[3][4] = {
2, 20 , 10 , 4,
4 , 100, 20 , 34,
5 , 12 , -12 , -34
for(int i = 0 ,length = sizeof(arr4) / sizeof(arr4[0]);
for(int j = 0 , len = sizeof(arr4[i]) / sizeof(arr4[i][0]);
printf("%d\t" , arr4[i][j]);
printf("\n");
NSLog(@"-----------------------------");
int arr5[][4] = {
2, 20 , 10 , 4, 4
for(int i = 0 ,length = sizeof(arr5) / sizeof(arr5[0]);
for(int j = 0 , len = sizeof(arr5[i]) / sizeof(arr5[i][0]);
printf("%d\t" , arr5[i][j]);
printf("\n");
printf() 函数和 NSLog() 函数的区别:
printf() 用于输出 C 格式的字符串。printf 的第一个参数只需使用一个双引号引起来的字符串即可,而NSLog需要使用@前缀。
NSLog() 函数主要用于记录日志,输出时会自动添加日期,时间,输出程序,并自动换行,而 printf 没有这些。
字符数组,字符串与结束标志
普通字符数组与其他的数组并没有本质区别。示例:
char cArr[] = {'I', ' ' , 'l' , 'o'
, 'v' , 'e' , ' ' , 'i' , 'O' , 'S'};
for(int i = 0 , length = sizeof(cArr)/sizeof(cArr[0]);
NSLog(@"%c" , cArr[i]);
特别说明:C 并无真正的字符串支持
C 语言(OC是 C 语言的超集)用字符数组来保存字符串的。字符串的长度并不总是根数组长度相等。
C 是如何确定一个字符串结束的呢?
C 语言提供了‘\0’作为字符串的结束标志。就是说即使一个字符数组长度为100,但它的第8个字符为‘\0’,系统将认为该字符串只包含9个字符。在字符数组中使用‘\0’后,数组长度就没那么重要了。‘\0’代表 ASCII 码为0的字符。代表什么都不是的字符,它的作用仅仅是代表一个字符串的结束。
printf("hello,objective-c");这句代码表面上没有用\0,实际系统会自动在底层的字符数组的最后一位添加\0结束标志。C风格的字符串都是这样的情况。
使用字符数组来保存字符串的2种形式
定义一个字符数组,不指定长度,直接用字符串对其执行初始化,让系统根据其长度决定
char str[] = "I love iOS";
如果字符串数组可能保存多个字符串,那就要定义该字符串数组的长度比最长的字符串至少长一个字符。
char str2[20] = "I love iOS";
可以看出,C 语言完全允许直接通过字符串给字符数组赋值。
输出字符串和字符串函数
C语言提供一些常用的标准函数来处理 C 字符串。alaigle总结的比较全,这里贴出链接。不再详述。参加链接:
示例代码:
char s1[30] = "hello";
strcat(s1 , ", fkjava.org");
printf("%s\n" , s1);
NSLog(@"s1字符串的长度为:%zu" , strlen(s1));
char s2[40];
strcpy(s2 , s1);
NSLog(@"%s" , s2);
在使用 objective-c 的时候尽量使用更为强大 OC 字符串——NSString对象。
OC中的数组
Objective-C 二维数组详解
【iOS沉思录】iOS中的二维数组
字符数组与整型数组的初始化和赋值对比
Objective-C 声明一个C语言类型的数组和访问方式@property
Objective-C实现一个基于数组下标[index]和字典[@&key&]的访问模式
iOS中数组遍历的方法及比较
Xcode基础:Objective-C中的数组详解
iOS入门(六)二维数组
C/C++二维数组名和二级指针
没有更多推荐了,block是一种块语法,类似于函数指针,它可以封装一段代码,被封装的代码在block被调用的时候才会执行。
一、block的定义
#import &Foundation/Foundation.h&
int main(int argc, const char * argv[]) {
@autoreleasepool {
//设置一个没有返回值 没有参数的block
void(^back)(void) = ^{
NSLog(@"Hello");
};//末尾的分号是十分重要的,写这篇博客时我就没有注意到...
//设置一个有参数有返回值的block
int(^sum)(int a,int b) = ^(int a,int b){
return a +
一般来说block一般都是写在实现文件中的,不过在这里为了图方便,我将它们都写在了main.m中。首先一个block应该包含
返回值,black名,以及参数。首先来看第一个block,开头的 void 说明这个block(代码块)是有返回值的,后面的括号中的 ^ 是block的标志,表示我们正在定义一个block,后面的 back 是block的名字,后面的一个括号中是这个block的参数。紧接着是是一个等号,这个等号表示等号后面的内容是 back block的内容。
下面的 sum 是有一个整型的返回值,接受两个整型参数的block,我们返回了两个整型参数的和。
二、block的内存管理
创建一个block实际上就是分配一片独立的内存空间(堆上),去运行block里面的代码块。这个代码块的运行空间已经脱离那个位置了,但是block会保存定义block的那个上下文(运行环境),换句话说就是copy了一份上下文,所以在block里面可以访问外部的变量,但是无法改变外部变量的值,因为改变不能影响到原来的那个外部变量,如果非要改变外部变量的值,需要在外部变量的声明前面写一个__block(两个下划线)。
#import &Foundation/Foundation.h&
int main(int argc, const char * argv[]) {
@autoreleasepool {
__block int a = 10;//a对于change block是外部的变量
void (^change)(int c) = ^(int c){
NSLog(@"%d ",a);
change(18);
这里我们定义了一个change block,在它的外面我定义了一个整型变量 a ,当它前面还没有__block这个关键字时,它是不能被block所改变的,因为,block里面只是访问的a的副本,改变无法传回到a本身。但是我们加上一个__block之后,就把这个a的地址传递到了堆上的那个空间中。现在输出的值就是11了。
block容易造成循环引用,当在block中调用某一个类的属性或者方法,由于block一般在实现文件中定义,所以会用到self.name [self test]等方法,一旦使用了这些方法block会对这个对象进行强引用,
解决方案:通过
__weak typeof(self) weakself = self
将self声明为弱引用
由于block会拷贝一份上下文,所以对类的一个对象,实际拷贝的是对象实际的在内存中的地址所以在对这个对象中的内容进行修改的时候既不用在对象前前缀 __block了,因为是地址。比如下面的 lsr 对象,实际上他是堆上的一个真实的对象的地址,通过访问地址来改变值是可以实现的。
#import &Foundation/Foundation.h&
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person * lsr = [Person new];
void (^chagne2)(void)=^{
lsr.name=@"lisiran";
NSLog(@"%@ %d",lsr.name,a);
chagne2();
没有更多推荐了,Pages: 1/4
主题 : 突然明白swift是怎么回事儿了
级别: 精灵王
发帖: 1397
可可豆: 8756 CB
威望: 8752 点
在线时间: 2113(时)
发自: Web Page
突然明白swift是怎么回事儿了&&&
本帖被 aaronglyang 执行加亮操作()
用过Unity的都知道,为了降低门槛,吸引开发者,它支持多种编程语言开发,比如C#、Unity Script,还有一个其它什么名字的脚本语言(查了一下,名叫Boo),后来我为Unity开发插件时明白了其中的奥秘,原来Unity有一堆标准C接口库,上面只不过是用各种编程语言调用这些库的API接口而已,就这么简单。当然,Unity还是为那些脚本语言做了优化的,比如所有的脚本语言都是编译后再执行的,而不是解释执行,所以提高了运行速度,但还是比不上C的运行速度,所以耗时的复杂运算不宜在脚本中进行,而应该做成动态链接库调用。这个swift应该也是这个思路,底层仍然是cocoa/cocoa touch类库,上面弄出个简练的脚本层调用这些库,由于LLVM编译器极其优秀,所以编译成一体的本地机器码时,反而比从复杂的objective-c调用这些库更快些。为什么swift竟然会比objective-c执行效率高?我们一般都认为脚本语言是解释执行的,所以运行速度慢,但不都是这样,有编译运行的,比如Perl就是即时编译后运行的。有文章说swift是苹果搞编译器开发的人设计出来的,他一定会让swift编译运行,由于swift去掉了与c语法兼容的包袱,很精炼,所以没有多少语法糖反复包裹主要代码,当然速度快了,尤其在大循环里面调用函数,调用开销很多消耗在函数包装上,对速度的提升会更明显,WWDC 2014视频中显示加密算法对执行速度的提升最多,大家都知道加密算法就是大循环套小循环再在其中调用函数的典型应用。欢迎讨论。[ 此帖被artgolf在 14:51重新编辑 ]
本帖最近评分记录: 共1条评分记录
总结得非常好~
级别: 新手上路
UID: 177993
可可豆: 111 CB
威望: 74 点
在线时间: 100(时)
发自: Web Page
哈哈 ,说的好。。
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 25(时)
发自: Web Page
既然swift和OC都是调用cocoa等库 也都是编译成本地代码,为啥swift会比OC快呢
级别: 精灵王
发帖: 1397
可可豆: 8756 CB
威望: 8752 点
在线时间: 2113(时)
发自: Web Page
简单的东西都快,就象c比c++要快,语法糖也要耗费cpu的。
级别: 骑士
UID: 23566
可可豆: 850 CB
威望: 851 点
在线时间: 766(时)
发自: Web Page
个人感觉swift与oc相比, 提高明显的应该是代码效率, 执行效率方面倒是不会存在很大的差别.
级别: 骑士
UID: 157406
可可豆: 933 CB
威望: 736 点
在线时间: 847(时)
发自: Web Page
能举例说明一下哪里swift执行效率比OC高吗?论坛上好多人都说swift效率高,不明其缘由
不积跬步,无以至千里
级别: 新手上路
可可豆: 153 CB
威望: 14 点
在线时间: 123(时)
发自: Web Page
回 5楼(txjust) 的帖子
同求。。。。。。。。。。。。
级别: 新手上路
UID: 218025
可可豆: 339 CB
威望: 230 点
在线时间: 80(时)
发自: Web Page
swift怎么就比OC得效率高了
级别: 圣骑士
UID: 69458
可可豆: 1682 CB
威望: 2616 点
在线时间: 849(时)
发自: Web Page
回 5楼(txjust) 的帖子
他们这么说 是因为 开发者大会上&&Apple这样说的说是比oc快1.3倍
级别: 侠客
可可豆: 245 CB
威望: 245 点
在线时间: 178(时)
发自: Web Page
提高编写效率,至于性能嘛,我信apple
Pages: 1/4
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版IOS开发入门之iOS狂暴之路(开始篇)---学习路线总结
IOS开发入门之iOS狂暴之路(开始篇)---学习路线总结
摘要:本文将带你了解IOS开发入门之iOS狂暴之路(开始篇)---学习路线总结,希望本文对大家学ios有所帮助
本文将带你了解IOS开发入门之iOS狂暴之路(开始篇)---学习路线总结,希望本文对大家学ios有所帮助一、学习路线规划 & &
& & 现如今移动端的两大平台Android和iOS是风光无限,但是又有谁能够保证这两个平台能够昌盛一辈子呢?谁也不敢保证其中一个在未来几年之后就会成为第二个诺基亚,所以我们现在会Android的同学应该考虑学习iOS,会iOS同学也是否要考虑学习Android。那么从这篇文章开始我们就来开启我们的iOS学习之旅,但是这里的前提是你会一些基础的C语言语法和OC语法以及Android的开发经验,关于C语言,这是大学必学的一门课程,所以不了解的同学需要自行搞定了,而对于OC语法的介绍,在之前我已经很详细的介绍了十几章内容,不了解的同学可以点击这里:OC学习概要总结 当然如果有了Android的开发经验的话,那么学习起来就更方便和容易了,因为iOS和Android在很多方面都有相似之处,有的地方可能完全一样,只是Api不同,而且在后续的介绍中,会将OC语法和Java语法进行比较,iOS和Android进行比较讲解。下面就来看一下我们学习iOS的路线: & &
& & 通过上面的一张图,我们可以看到iOS的学习路线和当初Android的学习路线差不多,在移动端平台中,其实最主要的就是四大核心基础模块:UI控件视图使用、多线程、网络访问、数据本地存储;只要把这四个核心点弄清楚了,在加上后续的项目实践,以及后续的经验积累,iOS进阶还是很简单的,而且后面会发现其实iOS把有些功能封装的太好了,以至于没有像Android中那么复杂,比如保存用户的设置信息,在iOS中使用两行代码即可完成,而在Android中可能需要6~7行代码去做。还有一个最核心点就是动画效果的实现,做过Android的同学应该知道在Android中实现一些特殊的动画还是比较费劲的,在iOS中实现起来就非常简单,简单的原因就是他把api封装的太好了,我们只要傻瓜式的调用即可,当然也要知道他的原理。下面就上面几点来一一讲解一下: & &
& & 二、学习路线知识总结 & &
& & 第一、C语言基础知识讲解 & &
& & 作为一个计算机科班的人,C语言应该是大学中必须的一门课程,不管你最后是选择了Java还是PHP这样的语言,C语言是最核心的C系语言,所谓C系语言就是大致语法都相同的,比如Java,C++,OC等都是C系语言,所以这些语言相互学习是非常简单的,当然以前还有B系语言,像B语言,VB等,他们的语法结构就很类似了。 & &
& & 那么为什么说C语言基础知识必须要了解呢?当初在学习Android的时候,其实后续要使用到NDK开发,C语言也是必须要掌握的,他是核心基础语言,因为后续开发iOS还是会使用OC语言作为基础,那么在开发中,会发现在iOS程序中会经常用到一些C语言的函数和功能,所以C语言必须要掌握,但是我们最主要的还是需要掌握C语言中最核心的几个知识点:指针,结构体和数组;关于其他的知识大致和Java类似,如果你学习过Java的话,关于指针在iOS开发中用到的是最多了,准确的说以后只要在iOS中如果定义一个类型是NS开头的,那么一般都是指针类型,比如:NSString* str;如果是结构体类型的一般是CGRect rect;所以从这一点上我们可以很好的区分类型结构了,而对于指针还有一个重要意义就是能够从一个函数中得到多个返回值,这个也是在开发中经常会用到的,比如在iOS开发中有一个方法执行了一个功能,我们即想知道这个方法执行的结果如何,又想知道执行的过程信息,那么这时候肯定是要返回两个信息了,在Java中我们可能会自定义一个类型封装这两个信息,或者使用回调机制,但是在OC中可以直接使用指针作为一个信息的返回状态,比如:BOOL xxx_YYY:(NSInteger)arg1 zzz:(NSError**) 这里看到最后一个参数就可以从函数中得到功能的执行的错误信息,看到他是二级指针,我们在外面只需要定义一个NSError* error1 =然后使用&error1传递参数进入,最后就可以得到这个信息了,这里的&号就是取一个变量的地址,所以这么看到指针就是地址,地址就是指针。 & &
& & 说到指针,还有一个重要的知识点就是函数指针,关于函数指针的作用就可以想成类似于Java中的回调功能,可以在一个函数中传入一个函数指针类型,在函数内部使用函数指针来调用这个函数功能;当然在OC中也有回调机制只不过叫做协议功能,类似于Java中的接口类型。 & &
& & 第二、OC语言基础回顾 & &
& & 在多年前,我就已经介绍了OC的所有基础语法知识,如果不了解的同学,可以点击这里进入查看:OC学习路线概要 当时讲解的已经非常详细了,但是不是所有的知识都会用到,比如谓词这些功能可能用的就比较少了。但是有些核心知识点用的还是比较多的。 & &
& & 1、OC中类的定义以及方法的定义 & &
& & 虽然OC和Java同属于C系语言,但是他们的语法结构还是有些区别的,比如他们定义类的方式就有很大的区别,所以学习Android的同学转iOS刚开始第一步就得多写代码多习惯OC语法即可。OC中新建一个类会产生两个文件,一个是头文件.h,还有一个是类实现文件.m;一般.h文件中定义的是这个类的类型: & &
& & @interface 类名:NSObject{ 定义属性 } 定义方法 & &
& & @end & &
& & 而在.m中一般是类的具体实现: & &
& & @implementation & &
& & 实现方法方法 & &
& & @end & &
& & 这里看到,OC中定义类没有使用{},而是使用@关键字进行划分区域的。 & &
& & 而在OC中定义方法也是和Java有些区别的: & &
& & 方法说明 (返回类型) 方法名 : (参数类型)参数名称 1》、方法说明有两种: & & 一种是减号:&-&,表示该方法是对象方法,就是必须用对象实例才能调用的 & & 一种是加号:&+&,表示该方法是类方法,就是可以用类直接调用的,不需要实例化对象的,类似于Java中的static方法 2》、返回类型:这个就简单了,和Java语言很类似了 & &
& & 上面就是OC中定义类和方法的格式,然后就会涉及到OC语言中几个核心的知识点: & &
& & 2、协议和分类 & &
& & OC中的协议很好理解,就是Java中的接口类型,而对于分类的话,可能在Java中实现起来比较麻烦而且还有限制,他就是对一个已有的类进行添加一些新的功能,比如系统中操作字符串的类NSString,他没有校验邮箱的这个功能,那么我们就可以给NSString添加一个分类,自己写一个校验邮箱的这个功能,后续再使用NSString类型的话就可以直接调用这个功能即可,但是在Java中我们知道String类是final类型的,不能继承了,所以实现不了这种扩展功能了。 & &
& & 3、KVC和KVO操作 & &
& & 这两个功能个人认为是OC中比较好的功能了,在Java中也有相对应的功能,但是还需要我们手动的去写,而且没有一定规则很麻烦。其实这两个操作都是针对于OC中的属性进行操作的,其中KV是值键值对Key-Value,而KVC就是属性键值对进行编码(Coding);意思就是可以操作属性,比如可以通过属性名去设置该属性的值,在Java中可以使用内省或者是反射机制去实现,因为在Java中属性的规定是,只要有对应的get和set方法的都叫做属性,而属性名是getXXX方法的XXX和具体定义的属性名没有关系,但是在OC中属性名就是我们定义的属性名,而get和set方法是系统自动生成的。而KVO操作就是键值对属性的观察者(Observer),这个功能的作用就是可以监听一个类的属性的值的变化,这个用途还是很大的,比如想跟踪一个属性的值的变化状态,然后做一些指定事件触发等,其实这个功能在Java中也是可以实现的,但是Java中并没有那么强的规则,比如有些人会定义属性直接使用public类型,然后没有定义get和set方法,这么在调用一个属性的时候就肯定观察不到了,除非监控内存了。如果Java中有很强的规则,属性必须是private的,然后使用的时候必须调用set和get方法,我们只需要在这两个方法中加一个监听回调也是可以做到KVO的功能的。 & &
& & 4、集合类功能 & &
& & OC中和Java类似,一些集合类用的非常多,在OC中像NSArray和NSDirctionary用的比较多,他们相当于Java中的List和Map结构,而在OC中还需要注意的就是如果类型中没有Mutable的类型都是不可变结构类型,比如NSArray数组,他是不能进行增删改操作的,而对应的NSMutableArray类型才可以,不知道为何要这么设计。后续很多类型都会是这种规则。 & &
& & 5、基础功能类框架:Founction & &
& & 这个框架类似于java中的lang包和util包中的类功能,OC中的Function框架包括了基础的功能类,比如上面的集合类,还有常用的NSNumber类:主要用来操作数据类型的;NSData类:操作日期类型的,当然还有一个类的鼻祖NSObject类也是在这个框架中 & &
& & 第三、UI知识概要 & &
& & 从这个知识点,我们将正式开始iOS应用编写的功能了,前面的知识点只是基础。关于iOS中的UI知识学习会比Android中的UI简单的非常多,这里不会详细介绍,后续会单独介绍,主要介绍几个方面: & &
& & 1、iOS中常见常用控件介绍:包括显示文本控件UILabel,显示图片控件UIImageView,显示提示框控件UIAlertView,开关控件UISwitch,而这些控件我们知道都是系统的,因为iOS系统本生的这些控件设计的就很完美了,所以一般都是直接拿来就是用,而不像Android中系统的对话框不是那么美观,很多情况下都会从新定义设计 & &
& & 2、iOS中高级View介绍:这里主要介绍两个重要的功能控件:UITableView和UIScrollView,其中UITableView就是Android中的ListView用法都差不多,而UIScrollView类似于Android中的ScrollView,但是他的功能比ScrollView强大很多,在iOS中实现分页,切换页都是使用这个控件进行操作的,而在Android中会使用ViewPager来实现。 & &
& & 3、自定义视图View介绍:不管是Android开发还是iOS开发,一些系统的控件有时候满足不了我们的需求,那么这时候就需要去自定义一些控件了,自定义控件和Android中也很类似,iOS中继承UIView之后,在drawRect方法中使用CGContextRef类进行绘制各种图形即可,在Android中我们知道是在onDraw中使用Canvas进行绘制的。 & &
& & 4、控制器介绍:iOS中的控制器就和Android中的Activity组件功能类似,可以展示View,有自己的生命周期方法,而控制器系统提供了两个常用的控制器:UINavigationController和UITabBarController,这两个控制器的使用场景是UINavigationController主要用来操作视图的导航功能,比如从一个页面跳转到另一个页面,这个控制器其实就是一个栈功能,进入的话就用push操作,出来的时候使用pop功能来实现指定的页面跳转功能,在Android中比较费劲还得使用Intent来进行startActivity操作。另外一个UITabBarController功能主要是用来菜单视图切换功能,必须现在的微信页面中,底部的四个菜单切换功能。当然我们还可以自定义一个控制器功能。 & &
& & 5、视图控件的事件功能介绍:Android中我们知道有很多事件需要特殊处理,比如ListView的向下滑动,ViewPager的左右滑动等,在iOS中也是一样,有些特殊需求就要处理事件。 & &
& & 第四、多线程操作 & &
& & iOS中的多线程操作比Java中的线程操作方便点,因为他的Api比较少,主要就是四个知识点: & &
& & 1、自定义线程NSThread类,类似于Java中的Thread类 & &
& & 2、任务类NSOperation,类似于Java中的Runnable类 & &
& & 3、任务队列类NSOperationQueue,类似于Java并发库中的Queue类 & &
& & 4、GCD功能,这个功能主要是C语言实现的,他的优势可以重复利用设备的多核硬件资源,让多线程操作更加高效,也是苹果官方提倡使用的一种方式 & &
& & 第五、数据本地存储 & &
& & iOS开发中有时候想把一些数据保存到本地,每个应用都有自己的沙盒结构,这个和Android中很类似,只有本应用才有权限进行操作,Android中的数据存储主要包括:SharedPreference,数据库,SD卡等。而在iOS中主要包括以下几点: & &
& & 1、Plist:一般可以把数组和字典数据对象保存到本地的plist文件中. & & 2、Preference:保存用户的基本设置,和Android中的SharedPreference类似。 3、NSKeyedArchiver:归档和解档,可以把对象进行序列化,和Java中的ObjectInputStream类似。 4、SQLite:数据库操作,和Android中底层使用的数据库是一样的,但是这里是采用的纯C语言实现的。 5、CoreData:ORM操作的,可以把对象和数据库表联系操作。 & &
& & 第六、网络访问功能 & &
& & 任何一个移动平台必不可少的就是网络访问功能,在Android中用的比较多的就是HttpClient类了,在iOS中有类似有一些系统提供的网络访问api使用,主要涉及到这些类: & &
& & 1、NSURL:定义一个网络访问的URL地址。 2、NSURLRequest:网络访问请求对象,可以设置请求的参数设置。 3、NSURLConnection:直接连接访问,系统自动创建一个子线程进行操作。 4、UIWebView:这个和Android中的WebView很类似,可以访问网页内容,但是他和Android中的WebView还是有一些区别的。 & &
& & 大家是否回想起Android中WebView的一个经典漏洞就是在JS中可以使用getClass获取到对象类对象,然后调用Runtime类执行命令获取设备数据信息,就是因为在Android中可以使用addJavascriptInterface方法设置本地对象导致的,在iOS中不可以这么做的,如果想在JS中调用本地方法得想其他办法了。 & &
& & 第七、开发中常用框架介绍 & &
& & 不管是Android还是iOS平台,在实际开发过程中只依靠系统提供的功能api往往会达不到我们想要的功能,而且效率使用并没有那么高,那么一些主流的开发框架就出现了,一般主要涉及到的框架是网络访问,图片加载,下拉刷新控件,数据库操作等,在Android中这些功能都有的一个著名框架:xUtils。用这个框架可以速度搭建一个app,很多功能好用还方便。iOS中的一些主流开发框架也是如此,主要就这几个模块: & &
& & 1、网络访问框架:AFNetworking & & 2、网络图片加载框架:SDWebImage & & 3、列表下拉刷新框架:MJRefresh & & 4、数据库操作框架:FMDB & & 5、UIWebView和本地交互框架:WebViewJavascriptBridge & & 6、数据缓存框架:YYKit & &
& & 第八、实践项目演练 & &
& & & 上面说到的都是开发技术点,而往往在真正使用这些点,就必须借助几个实际项目来进行实战一下,这样才能遇到更多的问题去解决,了解的更多同时一些功能用的也会比较熟练,这里介绍的实践项目主要是两个:微博主页实现,天真无谐应用。 & &
& & 总结 & &
& & 本文只是介绍iOS的大体学习路线,现有一个大体上感知认识,对iOS学习有一个预热,后续会通过这几个方面详细介绍,还是那句话,代码不是看出来的,是靠手敲出来的,经验不是靠嘴说出来的,是靠手敲出来的!一定要多写代码多练习,想不会都难。 & &本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!
看完这篇文章有何感觉? 已经有0人表态,0%的人喜欢
大家都在看
(C)2015 www.zhizuobiao.com All Rights Reserved
点击进入频道
请先登录您的账号
您还未登录,还不能发表评论

我要回帖

更多关于 当时为什么开发深圳 的文章

 

随机推荐