IOS学习笔记 O1
- 第一章 Objective-C语言基础
一、OC语言与C语言的比较
- C语言是一门面向过程的语言,而OC则是一门面向对象的语言。
- C语言文件默认保存格式为.c,OC语言默认保存格式为.m,两者头文件格式都为.h。
- C语言和OC语言都需要main()作为程序开始的入口。
- C语言有6个基本变量类型,OC多了布尔类型(BOOL,即YES/NO),ID(可以存储任何类型的对象,本质是一个指针),一些类型使用方式也发生了相应改变。
| 类型名 | 作用 | 备注 |
| NSInteger | 声明整型变量 | 在Xcode3中,直接将整型定义为long型 |
| NSFloat | 声明浮点型变量 | 在Xcode3中,直接将整型定义为double型 |
| NSString | 声明常量字符串 | 在Xcode3中,由NSString定义的字符串存放在类中,注意前边须加@符 |
| NSArray | 声明数组形变量 | 在Xcode3中,用NSArray来声明数组,用法在以后的笔记中详细介绍 |
| char | 声明字符型变量 | 同C语言 |
| ID | 声明通用指针类型 | 指向任何一个继承了Object(或者NSObject)类的对象 |
| struct | 声明结构体变量 | 同C语言 |
| union | 声明共同体(联合)数据类型 | 后续讨论 |
| void | 声明函数无返回值或无参 | 同C语言 |
| enum | 声明枚举类型 | 后续讨论 |
| signed | 声明有符号类型变量 | 同C语言 |
| unsigned | 声明无符号类型变量 | 同C语言 |
| BOOL/bool | 声明布尔类型变量 | YES/NO |
二、OC语言基础入门
<1> 使用Xcode工具开发OC程序
- 新建一个Xcode工程
1、启动Xcode,单击“Create a New Xcode Project”,或者单击屏幕顶端的“File”->“New”->“Project”,或者使用“command+shift+N”,打开新建项目对话框:

2、单击左侧对话框中OS X下的“Application”,再单击右侧对话框中的“Command Line Tool”,最后单击“Next”进入下一步。

3、填写“Product Name”(项目名)和“Organization Identifier”(组织标识),“Language”(语言)根据需要选择该项目的开发语言,这里选择“Objective-C”,单击“Next”。

4、选择文件保存路径,然后单击“Create”,然后你就得到了一个Xcode工程。

- 新建一个Cocoa Clas
1、按照上述步骤,新建一个名为笔记的工程如图所示,在左侧对话框中的“笔记”文件夹上单击右键,在弹出的菜单栏中选择“New File”。

2、左侧对话框中找到OS X,单击“Source”,在右侧对话框中选择“Cocoa Class”,单击“Next”。

3、填写“Class”(类名,下边有类的详细说明),“Subclass of”(子类从属于,即该类的父类),“Language”(语言)选择“Objective-C”,单击“Next”。

4、选择文件保存路径,不再赘述。完成以后我们便有了一个Cocoa Class文件。
<2> 编写OC文件的要求
- 预编译命令的书写要求
- #import用于引入头文件,可以自动过滤相同的引用。
- #import作用相当于Copy,如果两个.h文件相互引用,则Xcode会报错!这是因为在编译过程中,会首先将两个.h中的内容copy到一起,然后继续copy,copy。。
- 解决循环引用,请使用@class命令!
- #define#typedef用法与C语言没有差别,但都必须要写在#import后边。
- 基本命令的一些要求
- 关键字大都以@开头,字符串也要以@开头。
- 在OC中,打印一般使用NSLog指令,NS是NextStep的缩写。
>>NSLog指令会自动加上时间和进程信息,并在输出结果时自动换行,输出方法与C语言一致。
>>格式控制符与C语言无差别,增加了%@用于字符串的输出。
- 下面看一个简单的OC语言程序
#import <Foundation/Foundation.h> //定义main方法,作为程序入口
/*关于main方法括号里的参量请参考 http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html */
int main(int argc,char *argv[])
{
@autoreleasepool //自动释放池
{
NSLog(@"Hello World!"); //输出“Hello World!”
}
return ; //返回值
}
- 在这段代码中,引入了“Foundation”框架下“Foundation.h”的头文件,这样就可以使用“Foundation/Foundation.h”中提供的NSLog()输出函数。
- 然后在main方法中先编写@autoreleasepool{}——自动释放池,在自动释放池中的语句,系统会自动回收这些语句所创建的对象。目的是用来保证OC能够自动释放内存,避免引起内存泄漏。
- 程序向NSLog()传入的参数是@"Hello World!",这是OC语言中的字符串(NSString对象),OC要求在字符串前面加@,用于与C语言字符串进行区别。
程序运行的结果下图所示:

<3> 类(class)和对象(object,也称为实例,instance)
- 类和对象的区别
>>类是一个抽象的概念,而对象则是具体的概念。
比如说水果,它只是代表水果这个类别,其中可能包含很多对象(如苹果和桃子),并不能代表类中对象的具体信息,而对象可以是具体的苹果和桃子,并且可以用对象的属性(如颜色、味道等)来表示对象的具体信息。
- 类的使用方法
1、类包括接口部分和实现部分。
2、接口部分
>>接口部分用于定义该类包含的成员变量和方法
>>接口部分以@interface编译指令开始,以@end结束,该接口需要的定义的对象属性和方法都要写在@interface和@end之间
>>接口部分需要对每一个声明的对象属性定义setget方法,需要对定义的其他方法进行声明,要求每种方法前须加注释
>>接口部分要求必须使用驼峰式命名规则,即每个变量名或方法名首字母小写,之后每个单词的首字母大写,命名必须言简意赅,不能使用汉语拼音
>>接口部分的声明格式如下代码
#import <Foundation/Foundation.h> @interface User : NSObject
{
NSString * _name; //定义字符串变量
NSString * _sex;
NSInteger _age; //定义整型变量
}
/*********setget方法*********/
/**定义set用户昵称的方法*/
- (void) setName:(NSString *) name;
/**定义get用户昵称的方法*/
- (NSString *)name;
/**定义set性别的方法*/
- (void) setSex:(NSString *) sex;
/**定义get性别的方法*/
- (NSString *)sex;
/**定义set年龄的方法*/
- (void) setAge:(NSInteger) age;
/**定义get年龄的方法*/
- (NSInteger)age;
//************************************SET方法合并书写******************************************
23 - (void) setName:(NSString *) name andSex :(NSString *) sex andAge :(NSInteger) age; //注:该方法只能用于书写set方法,get依然还要继续写,这种写法不能使用点语法赋值!
24
/*********其他方法*********/
/**定义对象方法*/
- (void) createMyClass; @end //至此我们就完成了Users这个类接口部分的编写
3、实现部分
>>实现部分用于为该类的方法提供实现
>>实现部分以@implementation编译指令开始,以@end结束,该实现需要对象的方法都要写在@implementation和@end之间
>>实现部分需要对每一个声明的对象属性定义setget方法,需要对定义的其他方法进行声明,要求每种方法前须加注释
>>实现部分要求必须使用驼峰式命名规则,即每个变量名或方法名首字母小写,之后每个单词的首字母大写,命名必须言简意赅,不能使用汉语拼音
>>实现部分的声明格式如下代码
#import <Foundation/Foundation.h>
#import "User.h" @implementation User
/**set用户昵称的方法*/
- (void) setName:(NSString *) name{
_name=name;
}
/**get用户昵称的方法*/
- (NSString *)name{
return _name;
}
/**set性别的方法*/
- (void) setSex:(NSString *) sex{
_sex=sex;
}
/**get性别的方法*/
- (NSString *)sex{
return _sex;
}
/**set年龄的方法*/
- (void) setAge:(NSInteger) age{
_age=age;
}
/**get年龄的方法*/
- (NSInteger)age{
return _age;
}
29 //************************************SET方法合并实现******************************************
30 - (void) setName:(NSString *) name andSex :(NSString *) sex andAge :(NSInteger) age{
_name=name;
_sex=sex
_age=age
}
/**声明对象方法*/
- (void) createMyClass{
NSLog(@"声明一个名为User的类");
} @end //至此我们就完成了Users这个类实现部分的编写
三、对象的产生和使用
- 对象的产生和使用
1、调用类产生对象前,需使用#import命令引入写好的类文件(如上边写好的User.h)
2、定义变量的语法格式为 Class * variableName;
3、创建对象的语法格式为 [[Class alloc]initMethod];
4、变量赋值请使用点语法 variableName. attribute=variable;
5、方法调用的语法格式为 [Object methodName:parameter/(dataType) formalParameter];
- 一个简单的对象产生和使用程序
#import <Foundation/Foundation.h>
#import "User.h" //定义main方法,作为程序入口
int main(int argc,char *argv[])
{
@autoreleasepool //自动释放池
{
User * user1=[[User alloc]init]; //声明对象并开辟对象的内存空间
[user1 setName:@"Jereh"]; //调用set方法给字符串型变量name赋值
[user1 setSex:@"Male"]; //调用set方法给字符串型变量sex赋值
[user1 setAge:]; //调用set方法给整型变量sex赋值
[user1 createMyClass]; //调用createMyClass方法,打印“声明一个名为User的类”
NSLog(@"\n姓名:%@\n性别:%@\n年龄:%ld\n",[user1 name],[user1 sex],[user1 age]); //打印用户信息,User1后边的name,sex,age均使用了get方法来获取对象的属性
}
return ; //返回值
}
- 程序运行结果:

这一次的笔记到此结束,疏漏之处在所难免,烦请不吝赐教指点一二,谢谢各位看官!
IOS学习笔记 O1的更多相关文章
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记之关键词@dynamic
IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
随机推荐
- 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端
上一篇文章,我们了解了客户端如何与服务器创建WebSocket连接.但是一个巴掌拍不响,既然是通信,就必然最少要有两个端.今天我们来看看c#如何用已有的框架实现一个WebSocket服务端. 在.Ne ...
- LAMP环境
LAMP = Linux + Apache + MySQL + PHP [1] [2] [3] [4] [1]Linux是一套免费使用和自由传播的类Unix操作系统, ...
- RunLoop(官方文档翻译)
循环运行 运行循环是与线程相关联的基本基础设施的一部分.一个运行循环是用于调度工作,并协调接收传入事件的事件处理循环.一个运行循环的目的是让你的线程繁忙时,有工作要做,把你的线程时有没有睡觉. 循环运 ...
- 【补充版】HashMap(根据value筛选查找)
HashMap查找之根据Value查找 一般大家都知道对于HashMap而言都是通过key来进行查找.找到了key自然对应的value也就一并找到了.但是有些情况下就需要通过value来进行判断查找. ...
- thinkphp 数据访问
<?php namespace Admin\Controller; use Think\Controller; class MainController extends Controller { ...
- Nginx Location配置总结
Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...
- ReactiveCocoa框架学习<一>
1.Cocoapods导入ReactiveCocoa: use_frameworks! target 'RACDemo' do pod 'ReactiveObjC', '~> 2.1.0' en ...
- iOS 9/10强制使用https访问网络,使用了第三方SDK的应用需要配置的信息
2017年01月01日起苹果将全面禁止使用http来访问网络. 网上扒了一些资源,解决方法还是有的,但是都不确定是否可以通过审核,毕竟实践才是检验真理的唯一标准. 后续如果上线成功,再来分享. 如果应 ...
- Monkeyrunner小脚本关于camera的使用
一下代码涉及自动执行camera,属性一个小设置,恢复初始值,并在中间添加截屏功能 将两个截屏进行前后对比,并返回值 适合初学者,刚刚了解monkeyrunner 的人员来看 注意:一下脚本如果不能执 ...
- TCP协议学习记录 (二) Ping程序
简单的实现了一个ping程序,没有做icmp差错报文的检查. 支持自定义字节数,支持发包个数 #pragma pack(4) #define ECHO_REQUEST 8 #define DATASI ...