Objective-C基础笔记(1)基本概念和第一个程序
一、基本概念
Objective-C(简称OC)是iOS开发的核心语言,苹果公司在维护,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。C语言是面向过程的语言,OC是在C语言基础上加上了一层面向对象的语法(将复杂面向对象语法去掉了)。我们可以使用OC开发Mac OS X平台和IOS平台的应用程序。
2014年10月编程语言排行榜(http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
从这个排行榜上可以看到,高居榜首的还是c、java、object-c、c++、c#、php、python、javascript.
注意:
1、Objective-C是没有包的概念的,也就是没有命名空间机制,而是通过给类名添加前缀来防止类名冲突。
2、Objective-C中的关键字以@开头,防止和c/c++的关键字冲突。
3、Objective-C中的字符串以@开头。
语法:
需要注意的是上面的红色字部分:
BOOL类型(YES\NO)其实就是1和0
nil相当于Java中的null
self相当于Java中的this
for(xx in xx)和javascript的快速遍历相同,相当于java中的for...each
继承和Java相同是单继承
二、第一个OC程序
//
// main.m
// firstOCProj
//
// Created by lixiaoqiang on 14/11/11.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
控制台输出:
2014-11-11 23:44:36.052 firstOCProj[1649:99047] Hello, World!
上面的@autoreleasepool和内存管理有关,暂时不用管。
三、类的基本语法
//
// Student.h
// firstOCProj
//
// Created by lixiaoqiang on 14/11/11.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//
//该文件只是用来声明Student这个类有哪些成员变量和方法 //包含NSObject所在的头文件
#import <Foundation/Foundation.h>
//@interface @end代表声明一个类
//和Java不同的是OC中不能省略NSObject的默认继承
// : 代表继承
@interface Student : NSObject{
//定义成员变量(必须定义在该括号内)
int age;
} //age的get方法
//如果是动态方法 -
//如果是静态方法 + (-和+必须添加)
//OC中的参数类型都用括号括住
//.h文件中的方法都是公共方法
- (int)age; //age的set方法
//OC中一个 : 对应一个参数
- (void)setAge:(int)newAge;
@end
Student.m文件
//
// Student.m
// firstOCProj
//
// Created by lixiaoqiang on 14/11/11.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
//
//自定义的头文件使用双引号
#import "Student.h" @implementation Student - (int)getAge {
return age; //age在父类中
} - (void)setAge:(int)newAge {
age = newAge;
} @end
main.m文件
//
// main.m
// firstOCProj
//
// Created by lixiaoqiang on 14/11/11.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Student.h" int main(int argc, const char * argv[]) {
@autoreleasepool { //创建一个Student对象
//1、调用一个静态方法alloc分配内存
//OC 中通过类名调用方法 [类名 方法名]
//[Student alloc]返回一个指针,在OC中stu称为对象
//这个其实和Java中的对象(this)是一样的(引用)
//Student *stu = [Student alloc];
//2、调用一个动态方法init进行初始化
//stu = [stu init]; //连接起来使用
Student *stu = [[Student alloc] init];
[stu setAge:100];
NSLog(@"调用了setAge方法");
int age = [stu age];
NSLog(@"Student的age是%i", age);
//释放对象
//[stu release];
}
return 0;
}
运行结果:
2014-11-12 00:25:03.661 firstOCProj[1707:110472] 调用了setAge方法
2014-11-12 00:25:03.663 firstOCProj[1707:110472] Student的age是100
四、点语法
#import <Foundation/Foundation.h> @interface Person : NSObject{
int _age;
int _no;
} - (void)setAge:(int)newAge;
- (int)age; //注意: 方法名是setAge:andNo:
- (void)setAge:(int)newAge AndNo:(int)no; @end
#import "Person.h" @implementation Person //方法名是setAge: (冒号也是方法名的一部分)
- (void)setAge:(int)newAge {
NSLog(@"调用了setAge方法:%i", newAge);
_age = newAge;
} //方法名是age
- (int)age {
NSLog(@"调用了age方法");
return _age;
} @end
在Person类的实现里面我们分别打印了两个log用来判断是否调用了该方法
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init]; //方法一:
//[person setAge:10];
//int age = [person age]; //方法二:(点语法)
//OC中调用的成员方法,等效于[person age]
person.age = 11;
//等效于[person setAge:11]
int age = person.age; NSLog(@"age is %i", age);
}
return 0;
}
输出结果:
2014-11-12 20:03:55.718 firstOCProj[521:19414] 调用了setAge方法:11
2014-11-12 20:03:55.719 firstOCProj[521:19414] 调用了age方法
2014-11-12 20:03:55.720 firstOCProj[521:19414] age is 11
可以看到在OC中的点语法和Java中是不一样的,person.age调用的是成员方法而不是变量。
//
// Person.m
// firstOCProj
//
// Created by lixiaoqiang on 14/11/12.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
// #import "Person.h" @implementation Person - (void)setAge:(int)age {
_age = age;
} - (int)age {
return _age;
} - (void)setNo:(int)no {
_no = no;
} - (int)no {
return _no;
} //实现构造方法 - (id)initWithAge:(int)age andNo:(int)no {
//首先要调用super的构造方法
if(self = [super init]){ //如果self不为nil
self.age = age;
self.no = no;
}
return self;
} // 重写父类的description方法
// 当使用%@打印一个对象的时候会调用
// NSString 是一个字符串类
- (NSString *)description {
return [NSString stringWithFormat:@"age is %i and no is %i", _age, _no];
} @end
//
// main.m
// firstOCProj
//
// Created by lixiaoqiang on 14/11/11.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] initWithAge:15 andNo:2]; NSLog(@"age is %i and no is %i", person.age, person.no); //%@代表打印一个OC对象
NSLog(@"%@", person);
}
return 0;
}
Objective-C基础笔记(1)基本概念和第一个程序的更多相关文章
- 【matlab 基础篇 01】快速开始第一个程序(详细图文+文末资源)
快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 文章目录 1 软件安装 2 打开软件 3 编写程序 3.1 基础步骤 3.2 添加PATH 3.3 命令行模式 4 ...
- Python 学习笔记(六)Python第一个程序
Python 语句 赋值语句 1.将3对象赋值给了变量a 2.将3,4赋值给了变量a,b >>> a = 3 >>> a ,b = 3,4 >>> ...
- Python基础—01-认识python,编写第一个程序
认识python 发展历史:点此查看简介 就业方向: WEB.爬虫.运维.数据分析.机器学习.人工智能.... 版本选择 python2.7是最后一个py2的版本,2020年将不再提供支持 pytho ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- C#基础笔记 转自wojiushigelg
笔记如下: 概念:.net与c# .net/dontnet:一般指.net framework框架,一种平台,一种技术 c#(charp):一种编程语言,可以开发基于.net的应用. *java既是一 ...
- HTML5基础——笔记
HTML5基础——笔记 近几年来,互联网+.大数据.云计算‘物联网‘虚拟现实‘人工智能.机器学习.移动互联网等IT相关新名词.新概念层出不穷,相关产业发展如火如荼.互联网+移动互联网已经深入到人民日常 ...
- 数据结构-浙大 MOOC 笔记一 基本概念
做一些笔记记录自己的学习过程 第一节课介绍了数据结构的基本概念,首先没有直接给出相关的定义而是通过思考如何在书架上摆放书籍这样一个简单的类比了解到数据的组织方式的重要性,并通过printN函数的循环实 ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
随机推荐
- crm使用soap删除字段
//C# 代码: //DeleteAttributeRequest request = new DeleteAttributeRequest(); //request.EntityLogicalNam ...
- Bloxorz I (poj 3322 水bfs)
Language: Default Bloxorz I Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5443 Acce ...
- 在cmd命令行中弹出Windows对话框(使用mshta.exe命令)
有时候用bat写一些小脚本最后会弹出对话框提示操作成功,可以用mshta.exe来实现,它是Windows系统的相关程序,用来执行.HTA文件,一般计算机上面都有这个程序,实现如下: mshta vb ...
- 【HDU 5402】Travelling Salesman Problem(构造)
被某题卡SB了,结果这题也没读好...以为每一个格子能够有负数就当搜索做了.怎么想也搜只是去,后来发现每一个格子是非负数,那么肯定就是构造题. 题解例如以下: 首先假设nn为奇数或者mm为奇数,那么显 ...
- Gym - 100637B Lunch 规律
题意:n个点,给定起点和终点,可以每次可以走一格或两格,走一格则需要一个代价,每个格子只能走一次,问从起点到终点并经过每一个点的最小代价 思路:这题我没看出什么道理,先打了个暴力,结果发现了个相当坑的 ...
- 将本地的代码上传到网上SVN库
使用VisualSVN Server创建版本库: https://jingyan.baidu.com/article/db55b609f6aa724ba20a2f6c.html 最详细的教程: htt ...
- FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有。
FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有. 1: man 在线查询 man ls2: ls 查看目录与档案 ls -la3: ln 建立链接文件 ln -f ...
- JS对象继承与原型链
1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 var parent = { lanage: "chinese" } var child = { name: "x ...
- 紫书 例题 9-14 UVa 1218 (树形dp)
这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...
- WinSocket 编程
套接字 套接字指通信双方在通信时所使用的通信点(Endpoint),通信的双方通过通信点来交换信息和数据.不同类型的通信会使用不同的类型通信点,比如对于电话通信而言,通信点就是电话号码和分机号码的组合 ...