Cocoa原理指南-学习和实践1
【bolg目标】
bolg仅仅针对<Cocoa原理指南>书中代码进行本地测试和文档学习,书中理论不进行摘要
个人觉得此书值得推荐阅读,从整体上学习Cocoa
【实践环境】
Mac 10.6
XCode4
【正文】
Pdf版
Cocoa整体纵览图,在书中页码:
Foundation
P15
P16
P17
Application Kit
P20
P21
/**************************************************/
下面分析下P27书中代码
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *args = [[NSProcessInfo processInfo] arguments];
NSCountedSet *cset = [[NSCountedSet alloc] initWithArray:args];
NSArray *sorted_args = [[cset allObjects]
sortedArrayUsingSelector:@selector(compare:)];
NSEnumerator *enm = [sorted_args objectEnumerator];
id word;
while (word = [enm nextObject]) {
printf("%s\n", [word UTF8String]);
}
[cset release];
[pool release];
return 0;
}
比对资料学习,如下
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
NSProcessInfo
此类是对当前进程信息的访问
The NSProcessInfo class provides methods to access information about the current process. Each process has a single, shared NSProcessInfo object, known as process information
agent.
Getting the Process Information Agent
+ processInfo
Accessing Process Information
– arguments
– environment
– processIdentifier
– globallyUniqueString
– processName
– setProcessName:
Sudden Application Termination
– disableSuddenTermination
– enableSuddenTermination
Getting Host Information
– hostName
– operatingSystem
– operatingSystemName
– operatingSystemVersionString
Getting Computer Information
– physicalMemory
– processorCount
– activeProcessorCount
– systemUptime
关于上面罗列的,一目了然的明白这些方法的目的
本例使用processInfo和arguments
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
NSCountedSet 继承NSMutableSet : NSSet : NSObject
The NSCountedSet class declares the programmatic interface to a mutable, unordered collection of indistinct objects. A counted set is also known as a bag.
在本例,此类用于统计重复输入对象,在后续的调整代码有这么一句输出
NSLog(@"%@,%lu" ,item ,[cset countForObject:item]);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sortedArrayUsingSelector:属于NSArray类的,用于数组排序
@selector(compare:),通过文档,发现其中compare:这个函数来自NSNumber类{?这个是现行理解},其原型:
- (NSComparisonResult)compare:(NSNumber *)aNumber
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
按照书中描述,
SimpleCocoaTool a z c a l q m z
a
c
l
m
q
z
实际在调试中发现出现数据类似
/Users/...../SimpleCocoaTool
a
c
l
m
q
z
比书中所写代码多一个行输出
至于为什么会这样,要么书中作者截获,要么Xcode版本问题
下面在XCode4下进行下面改进
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
为了在调试中实践,最后结果类似书中类似输出,改进原有代码:
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *args = [[NSMutableArray alloc] initWithArray:[[NSProcessInfo processInfo] arguments]];//把NSArray换成NSMutableArray
[args removeObjectAtIndex:0];//移出第一个参数
NSCountedSet *cset = [[NSCountedSet alloc] initWithArray:args];
for(id item in cset)
{
NSLog(@"%@,%lu" ,item ,[cset countForObject:item]);
}
NSArray *sorted_args = [[cset allObjects]
sortedArrayUsingSelector:@selector(compare:)];
NSEnumerator *enm = [sorted_args objectEnumerator];
id word;
while (word = [enm nextObject]) {
printf("%s\n", [word UTF8String]);
}
for(id item in sorted_args)
{
NSLog(@"for %@" ,item);
}
[cset release];
[pool release];
return 0;
}
现在测试
SimpleCocoaTool a z c a l q m z
a
c
l
m
q
z
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
转载于:https://www.cnblogs.com/GoGoagg/archive/2011/08/24/2152032.html
Cocoa原理指南-学习和实践1相关推荐
- 【编译原理】编译原理系统学习与实践系列文章汇总目录(持续更新中)
本文属于「编译原理」系列文章的汇总目录,这一系列正式开始于2021/10/22,着重于「编译原理的学习与实践」.众所周知,编译原理难学难精,因此本系列将至少持续到作者本人「精通编译原理」为止(笑).由 ...
- python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》
在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...
- 基于设计原理与理念和实践的ElasticSearch学习、ELK日志收集、网盘搜索引擎
目录 基于设计原理与理念和实践的ElasticSearch学习 一.ES基础入门 ElasticSearch是什么? ES优点: ES缺点: ElasticSearch应用场景 ElasticSear ...
- 【数据库系统】数据库系统学习与实践系列文章汇总目录(持续更新中)
本文属于「数据库系统」系列文章的汇总目录,这一系列着重于「数据库系统知识的学习与实践」.由于文章内容随时可能发生更新变动,欢迎关注和收藏本文以作备忘.需要特别说明的是,为了透彻理解和全面掌握数据库系统 ...
- 八大深度学习最佳实践
翻译 | AI科技大本营 参与 | 刘畅 [AI 科技大本营导读] 2017年,许多的人工智能算法得到了实践和应用.名博Hack Noon作者 Brian Muhia 认为想要玩转人工智能,不仅要拥有 ...
- 【PWA学习与实践】(3) 让你的WebApp离线可用
<PWA学习与实践>系列文章已整理至gitbook - PWA学习手册,文字内容已同步至learning-pwa-ebook.转载请注明作者与出处. 本文是<PWA学习与实践> ...
- SVM-支持向量机原理详解与实践之一
SVM-支持向量机原理详解与实践 前言 去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部 ...
- 人工神经网络理论、设计及应用_TensorFlow深度学习应用实践:教你如何掌握深度学习模型及应用...
前言 通过TensorFlow图像处理,全面掌握深度学习模型及应用. 全面深入讲解反馈神经网络和卷积神经网络理论体系. 结合深度学习实际案例的实现,掌握TensorFlow程序设计方法和技巧. 着重深 ...
- 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
最新文章
- JAVA多线程和并发基础面试问答
- Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1)
- 【多线程】ThreadPoolExecutor 类的使用详解
- OpenGL text rendering文字渲染的实例
- 怎么在php项目安装tp5框架,框架安装与基本配置
- steam夏日促销用Python爬取排行榜上的游戏打折信息
- FoveaBox:目标检测新纪元,无Anchor时代来临!
- 从Powershell ***脚本学到的如何执行后台runspace~
- python中xlrd写操作_Python读写操作Excel模块_xlrd_xlwt_xlutils
- comet4j简单应用、文档教程
- steam授权_验号机器人正式上线,支持检验csgo账号、steam账号信息
- Xcode5 创建模板和UIView 关联XIB
- Unity3D Delegate
- 关于Echarts南丁格尔玫瑰图的部分解释
- linux的sssd服务,系统安全服务守护进程SSSD
- Python爬虫知网
- 人民币小写转大写算法
- FreeRTOS内核——任务与任务切换
- PostgreSQL 不在使用tigger或rule来模拟 SSQLSERVER timestamp 行变化版本管理
- 微信清除缓存的两种方法
热门文章
- 使用 Spot 低成本运行 Job 任务
- Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索
- comsol稀物质传递_印刷指南丨印刷油墨传递的影响因素?
- mysql悲观锁 更新_MySQL学习笔记(四)悲观锁 for update
- java ajax post_2、Ajax与Java通过POST方式交互
- springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程
- dsp广告和信息流广告区别_一文搞懂DSP-蘑菇街DSP广告实践
- 【完结】有三AI阿里云的深度学习基础课程暂时完结,欢迎扩散学习
- 中国电梯行业运行前景与品牌竞争分析报告2022版
- 全球及中国自媒体行业营销模式及应用规模前景分析报告2021-2027年