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 ...
随机推荐
- 试图切换控制addChildViewController、_transitionFromViewController
试图切换能够用transitionFromViewController. 步骤: View Controller中能够加入多个sub view,在须要的时候显示出来: 能够通过viewControll ...
- HDU 3555 Bomb(数位DP模板啊两种形式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...
- vue25---vue2.0变化
组件模版: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- FTP配置说明
1.下载rpm包,如vsftpd-3.0.2-21.el7.x86_64.rpm.可在系统盘里面找到或者下载 2.参考如下步骤.或者见链接http://blog.csdn.net/uq_jin/art ...
- 129.C++面试一百题(1-51)
- java 文件读写demo
分析错误日志: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public ...
- 昼猫笔记--什么是DOM
昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 Hello,大家好,昼猫,今天来加深下DOM 什么DOM呢?它的全称叫 Document Object Model 通过全称可以知道它是 文 ...
- 遇到的兼容性bug
1.(IE6):ie6环境下,通过设置z-index:999:无效果: 原因:IE6下,决定层级高低的不是当前的父标签,而是整个DOM tree(节点树)的第一个relative属性的父标签. 解决办 ...
- MOOC使用心得
1. Mooctest 使用心得 慕测平台是编程类考试和练习的服务平台,教师可以轻松监管考试流程,学生可以自由练习编程.系统负责编程练习的自动化评估及可视化展现,配合当下红火的MOOC慕课课程,慕测平 ...
- 51nod 更难的矩阵取数问题 + 滚动数组优化
这里要求要走到终点再走回来,可以转化为两个人走. 那么我们可以先粗暴的设f[x1][y1][x2][y2]为第一个人走到(x1, y1), 第二个人走到(x2, y2)的最大价值. 那么这样空间会很大 ...