Object-c 学习笔记(一)

想做IOS开发,培训之前自己先自学一段时间,于是开一篇新的笔记来记录学习的点滴吧。

Objective-c是以c语言为基础的扩展集,当然首先要得熟悉c语言再去学习Objective-c,我是根据《Objective-c基础教程》来自学的。鄙人初学,如有观点不同或者错误之处请指正亦可贻笑大方。

构建Objective-c程序

我们需要先下载Xcode来作为基本的编辑器,下载安装完成后我们来新建一个Xcode Project,之后我们选择

要在Type中选择Foundation,然后选择Next,按步骤保存项目即可。

main.m就是包含了程序的源代码。

HELLO WORLD 程序:

在C语言中我们可以这样来输出Hello World这句话

#include <stdio.h>

int main () {
   printf ("Hello World !");
   return 0;
}

现在可以在main中输入以下

#import <Foundation/Foundation.h>

int main (int argc,const char *argv[]) {
   NSLog (@"Hello World !");
   return 0;
}

点击左上角的运行后会在下面显示运行结果,如图:

代码分析:

Xcode通过 .m扩展名来表示文件使用的是Objective-c代码,应该是由object-c编译器处理。那么如果由c语言基础,不难看懂是由main()函数声明语句和return 语句结尾。这里的

#import <Foundation/Foundation.h>

语句告诉编译器查找Foundation框架中的Foundation.h头文件。

那么什么是框架呢?所谓的框架就是一种把头文件、库、图片、声音等内容聚集在一个独立单元中的集合体,Foundation属于Cocoa工具包中的内容,主要处理的是用户界面之下的那些(Layer)的特性,比如数据结构和通信机制。

我们使用的唯一一行Object-c语句的实际代码就是用了NSLog()函数

NSLog(@"Hello World !");

这行代码是向控制台输出Hello World !在C语言中常用的是printf()语句。NSLog()接受一个字符串作为其第一个参数,该字符可以包含格式说明符例如:%d,此函数会接受与其格式说明符相匹配的其他参数。当然,Objective-c是c语言的拓展集,在输出时依然可以使用printf()函数来进行输出(建议使用NSLog)。

@符号是什么东西?

@符号是Objective-c在C语言基础上添加的特性之一。@意味着引号内的字符串应该作为Cocoa的NSString元素来处理。

NSString又是什么?

NSString是Cocoa中的字符串。NSString支持:字符串长度,字符串比较以及整形或浮点值转换等等。

NS是指什么?

Cocoa在给所有的函数、常量和变量以及类型名都添加了NS前缀。这个前缀告诉我们这个函数是来自Cocoa而不是其他的工具包。

另外,例如NSArray存放数组,NSDateFormatter来设置不同的时间格式,NSThread提供多线程,NSSpeechSynthesizer能够听到语音。

布尔类型:

在c语言中,布尔类型有True和False两个值,在Objective-c中则是YES和NO两个值。

下面是一个简单的例子:

#import <Foundation/Foundation.h>

BOOL areIntsDifferent (int thing1,int thing2) {
   if (thing1== thing2) {
      return (NO);
   } else {
      return (YES);
   }
}

NSString *boolString (BOOL yesNo) {
   if (yesNO == NO) {
      return (@"NO");
   } else {
      return (@"YES");
   }
}

int main (int argc, const char *argv[]) {
   BOOL areTheyDifferent;
   areTheyDifferent = areIntsDifferent (5,5);
   NSLog(@"are %d and %d different ? %@",5,5,boolString(areTheyDifferent));
   areTheyDifferent = areIntsDifferent (23,42);
   NSLog(@"are %d and %d different ? %@",23,42,boolString(areTheyDifferent));
   return (0);
}

代码分析:

首先是areIntsDifferent()函数,

BOOL areIntsDifferent (int thing1,int thing2) {
   if (thing1== thing2) {
      return (NO);
   } else {
      return (YES);
   }
}

接受两个整形的参数,返回一个BOOL值,根据thing1和thing2来进行比较,如果相同返回NO,如果不同返回YES

第二个函数是,

NSString *boolString (BOOL yesNo) {
   if (yesNO == NO) {
      return (@"NO");
   } else {
      return (@"YES");
   }
}

这个函数的主要作用是将bool值转化为显而易见的字符串。boolString()的返回值是一个指向NSString的指针,这意味着函数会返回一个Cocoa字符串。

main()函数

areTheyDifferent变量保存了areIntsDifferent()的返回的YES或者NO。

那么在NSLog里面的%@是什么意思呢?

在NSString()中返回了一个指针,在NSLog中写%@格式说明符是为了通知NSLog接受适当的参数,将其作为NSString,并且使用字符串中的字符将其发送到控制台中。

Object-c 学习笔记(一)

时间: 2024-10-09 15:42:13

Object-c 学习笔记(一)的相关文章

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Object C学习笔记25-文件管理(一)

在此篇文章中简单记录一下文件管理,在Object C中NSFileManager用于管理文件已经路径.在Object C中的文件路径可以是相对路径也可以是绝对路径.斜线"/"开头,斜线实际上就是一个目录,称为 根目录.字符(-)用作用户主目录的缩写.点" . "表示当前目录,两点"  .. "表示父目录. 一. 创建NSFileManager 对象 NSFileManager非常简单,可以使用如下方式来创建NSFileManager对象. NSS

Object C学习笔记26-文件管理(二)

上一篇简单的介绍了如何获取文件属性,删除,拷贝文件等,本文继续记录Object C中文件IO操作. 一. 获取文件的执行主目录 在Object C中提供了一个方法 NSHomeDirectory() 用于获得执行执行的主目录,使用如下代码测试: NSString *homePath=NSHomeDirectory(); NSLog(@"执行文件的主目录:%@",homePath); 通过以上代码可以正确的输出应用程序的执行目录,上一张也提到了文件的目录问题,这个和Windows系统的有

object c 学习笔记

类方法: 一.类方法 类方法: 1.当类中有一些方法,使用的频率很高,并且不依赖于成员变量的时候,就可以把它声明成类方法来应用 2.一定以 + 号开头 (对象方法 - 号 开头) 3.一定是使用类名调用的方法 4.类方法中,不可以访问自身的成员变量因为调用类方法,不需要先创建对象,所以也就没有存储成员变量值的地方那么也就无法去访问成员变量 类方法的优势 1.不需要开辟内存空间存储对象,理论上是节省一定的内存空间 2.调用方便 谁有好点的例子能给说明一下么?或者补充点内容

Object C学习笔记2-NSLog 格式化输出数据

1 . 几种常用类型变量声明 int i =10; BOOL isShow=YES; BOOL isShow=1; float f = 3.1415926; char a =120; NSString *name [email protected]"Himi"; object-c中BOOL类型长度1byte, 若将short或int型数赋值给BOOL类型则截取低位1个字节. object-c  中字符串类型的声明和java,C# 有点不一样,string 在面向对象语言中是一个引用类型

WPF基础学习笔记(一)Dependency Object 和 Dependency Property

.依赖属性是WPF个人觉得对精彩和最有特色的部分.所以特地先拿出来. 首先要实现Dependency Property 则必须要继承Dependency Object.如果看下WPF的基础控件其实都间接或者直接继承Dependency Object,这点规律性我在后面再做规律陈述. 首先Dependency Object 我搬下书的描述 Only the thread that the Dispatcher was created on may access the DispatcherObje

C++ Primer 学习笔记33_面向对象编程(4)--虚函数与多态(一):多态、派生类重定义、虚函数的访问、 . 和-&gt;的区别、虚析构函数、object slicing与虚函数

C++ Primer学习笔记33_面向对象编程(4)--虚函数与多态(一):多态.派生类重定义.虚函数的访问. . 和->的区别.虚析构函数.object slicing与虚函数 一.多态 多态可以简单地概括为"一个接口,多种方法",前面讲过的重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法). 更通俗的说,多态行是指同一个操作作用于不同的对象就会产生不同的响应.或者说,多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态行分

Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

c++ 11学习笔记--Lambda 表达式(对比测试Lambda ,bind,Function Object)

所有c++ coder都应该为这个语法感到高兴,说的直白一点,Lambda 表达式就是函数对象的语法糖. 还是直接看对比栗子吧,抄袭的是msdn的官网 该示例使用 for_each 函数调用中嵌入的 lambda 向控制台打印 vector 对象中的每个元素是偶数还是奇数. 使用lambda #include <algorithm> #include <iostream> #include <vector> using namespace std; int main()

[Guava学习笔记]Basic Utilities: Null, 前置条件, Object方法, 排序, 异常

我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3842433.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. Null Guava用Optional表示可能为null的T类型引用. 创建:Optional.of(T)不接受null Optional.fromNullable(T)接受null Optional.absent() 查询:isPresent() get() or(T)如果为null则为T o