热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《ObjectiveC基础教程》读书笔记1—OC入门基础

1.OC的历史1996年12月20日,苹果公司宣布收购NeXTSoftware公司,NEXTSTEPOPENSTEP环境成为苹果操作系统主要发行版本OSX的基础。这个版本的开发环境

1. OC的历史
1996年12月20日,苹果公司宣布收购NeXT Software公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统主要发行版本OSX的基础。这个版本的开发环境被苹果公司成为Cocoa。(NextSTEP更名为Cocoa)
垃圾收集机制(GarbageCollection)只支持OSX系统。
OC是C语言的一个扩展集,几乎所有OS X或iOS平台上的所有应用程序都是使用该语言开发的。苹果公司提供了工具包,有Cocoa(针对OSX系统)和CocoaTouch(针对iOS系统)。
OC和Cocoa是苹果公司OSX和iOS操作系统的核心,早在20世纪80年代就已经推出。
2. xcode项目与文件
创建项目时,CompanyIdentifier中输入你的公司或网站地址的DNS反向格式,比如com.mywebsite.
Xcode通过.m扩展名来表示文件使用的是Objective-C代码,应由Objective-C编译器处理。而C编译器处理.c文件,C++编译器处理.cpp文件。在Xcode中,所有这些编译工作默认由LLVM 处理,这个编译器能够理解C语言的全部三个变体。Objective-C刚诞生的时候,扩展名.m代表message, 它指的是Objective-C的一个主要特性-消息传递机制,我们一般称之为.m文件。
与C语言一样,Objetive-C使用头文件包含结构体、符号常量和函数原型等元素的声明。在C语言中,使用#include语句来通知编译器查询头文件中相应的定义代码。在Objective-C中,我们#import来达到相同的目的。Xcode在你编译Objective-C、C++和C程序时都会使用#import命令。#import可保证头文件只被包含一次,无论此命令在该文件中出现了多少次,即#include命令会引起重复包含,而#import命令不会。在C语言中,程序员通常使用基于#ifdef命令的方案来避免一个文件包含另一个文件而后者又包含前者的情况。而在Objective-C中,程序员使用#import命令来实现这个功能。
3. 框架的概念
框架是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体。苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集来提供。Cocoa的组成部分有Foundation和ApplicationKit(也成为Appkit)框架。此外还有一套支持型框架,包含了Core Animation和Core Image, 它们为Cocoa增添了许多精彩的功能。Foundation框架处理的是用户界面之下的那些层(Layer)的特性,比如数据结构和通信机制。Cocoa的ApplicationKit框架,包含了Cocoa的许多高级特性:用户界面元素、打印、颜色和声音管理、AppleScript支持等。有时间可以阅读《Learn C on the Mac》和《Learn Cocoa on the Mac》。
每个框架都是一个重要的技术集合,通常包含数十个甚至上百个头文件。每个框架都有一个主头文件,它包含了框架内所有的头文件。通常在主头文件中使用#import,就可以访问框架内的所有功能。通过使用#import来包含主头文件,就能获得整个集合。通过#import导入文件时,加载速度会非常快(因为Xcode使用预编译头文件(一种经过压缩的、摘要形式的头文件)来加快读取速度)。
4. 简单函数学习
NSLog()函数和printf()函数很相似,都是输出函数。与printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串中可以包含格式说明符(比如%d) , 此函数会接受与格式说明符相匹配的其他参数。printf()在输出之前会把这些参数插入到第一个字符串参数中。Objective-C是添加了一些新特性的C语言。NSLog相比printf添加了一些特性,比如时间戳、日期戳和自动附加换行符('\n')等。NSLog()本质是具有coc0a特色的printf()函数。printf()不支持NSString。
Cocoa工具包使用NS前缀来避免名称冲突(两个不同的事物使用相同标识符时会引起的错误)。一般在编码中,你可以使用姓名首字母或公司名称作为变量和函数名的前缀。
5. OC基础知识入门
5.1 NSString 字符串类型
NSString: @符号是Objective-C在标准C语言基础上添加的特性之一。@符号意味着引号内的字符串应作为Cocoa的NSString元素来处理。NSString是Cocoa中的字符串。
NSString支持的部分功能如下:
1. 可以告诉你它自身长度
2. 将自身与其他字符串相比较
3. 将自身转换成整型值或浮点值
注意:一个比较容易犯的错误就是将C语言风格的字符串(而不是NSString格式的@"字符串"元素)传递给了NSLog()。如果这样的话,编译器会出现如下警告:warning: passing arg 1 of 'NSLog' from incompatible pointer type。
大多数Cocoa元素都以非常直接的方式命名,名称就可以反映出他们所能实现的功能。例如,NSArray存放数组,NSDateFormatter帮助你可以用不同的方式来设置时间格式,NSThread提供多线程编程工具,而NSSpeechSynthesizer能够让你听到声音。备注:所以学好英语很关键。
5.2 布尔类型
Objective-C也支持布尔类型(Boolean),它指的是可以存储真值和假值的变量类型。C语言拥有布尔数据类型bool, 它具有true和false两个值。Objective-C也提供了一个相似的类型BOOL, 它具有YSE和NO两个值。这两种不同的布尔类型可以在同一个程序中共存。
注意:深度嵌套的结构常令人困惑,也不易于理解,而且往往也是bug的藏身之所。

推荐阅读
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • iOS 类簇及越界处理
     估计做iOS开发的朋友都遇到多一个问题,就是数组越界,-[__NSArray0objectAtIndex:]:index1beyondboundsforemptyNSArray’ ... [详细]
  • IvebeentryingforadayortwototryandgetashadowtodrawinsidethetextofanNSTextField ... [详细]
author-avatar
LINBO-D_915
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有