IOS开发学习笔记009-OC基本知识
开始学习OC,时间不等人啊,要抓紧了。
OC基本知识
新建一个以.m结尾的文件,这既是oc的程序文件。在oc程序中完全兼容C语言。编译好链接类似。
oc包含头文件是使用#import <>
import 和include 的区别:
1:import和include一样的包含功能
2:import可以自动防止文件被重复拷贝
#import <Foundation/NSObjCRuntime.h>//NSLog头文件
//import 1:和include一样
// 2:可以自动防止文件被重复拷贝
int main()
{
NSLog(@"this is OC output");//自动换行
return ;
}
如果使用Foundation框架,则编译的时候需要添加参数 cc -c -framework Foundation a.m
每个框架都有自己的主头文件,和框架名一样,包含所有头文件。
如果有多个文件,编译顺序和c语言一样: cc -c one.m two.m -framework Foundation
BOOL类型(OC特有的)
定义:typedef signed char BOOL;
两种取值:
#define YES (BOOL) 1
#define NO (BOOL) 0
#import <Foundation/Foundation.h> int main()
{
BOOL b = YES;//
BOOL b2 = NO;// NSLog(@"%d\t%d",b,b2);//1 0
return ;
}
面向对象
万物皆对象。
常用术语
面向过程 Procedure Oriented
面向对象 Object Oriented,简称OO
面向对象编程 Object Oriented Programming,简称OOP
类和对象的区别
类是对象的抽象。
对象是类的实例。
类的构成:
1、类名
首字母大写,不能下划线,多个单词每个首字母大写
2、属性
3、行为(功能)
类的实现
/*
类
1、类名
首字母大写,不能下划线,多个单词每个首字母大写
2、属性
3、行为(功能)
*/ #import <Foundation/Foundation.h>//NSObject //1、类的声明:属性和行为
@interface Car : NSObject//继承NSObject,使类具有创建对象的功能
{
//属性,也就是成员变量(实例变量),默认会初始化为0,默认是保护属性
@public
int wheels;//轮胎个数
int speed;//时速
} //方法(行为):返回值,方法名,参数
//只要是oc对象的方法,必须以‘-’开头
//OC方法中任何数据类型都必须用"()"括起来
//OC方法中小括号就是用来括住数据类型
- (void) run; @end //2、类的实现,用力实现@interface中声明的方法
@implementation Car
//方法的实现
- (void) run
{
NSLog(@"Running!");
}
@end int main()
{
//创建对象,返回对象的地址
Car *p = [Car new];//OC中执行任何行为都需要这个 [行为执行者 行为];
p->wheels = ;//赋值
p->speed = ;//赋值 [p run];//调用方法 NSLog(@"speed is %d!",p->speed);//输出速度 return ;
}
在类创建对象之前会把类加载到内存中,每个对象还都有一个ISA 指针,指向这个类。
对象和函数的区别
- OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
- C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
- C函数不能访问OC对象的成员
- 低级错误:方法有声明,但是实现的时候写成了函数
#import <Foundation/Foundation.h> //1、类的声明
@interface Person: NSObject
{
@public
int age;//年龄
double weight;//体重
} - (void)walk;//行走 @end //函数1
void test(int age,int wei)
{
age = ;
wei = ;
}
//函数2
void test1(Person *p)
{
p->age = ;
p->weight = ;
} //2、类的实现
@implementation Person
//实现@interface中声明的方法
- (void)walk//行走方法的实现
{
NSLog(@"The person whoes age is %d and weight is %f is walking !",age,weight);
} @end int main()
{
Person *p1 = [Person new];//新建一个对象
p1->age = ;//年龄赋值
p1->weight = 66.7;//体重赋值
[p1 walk];//walk方法调用 Person *p2 = [Person new];//新建一个对象
p2->age = ;//年龄赋值
p2->weight = 77.0;//体重赋值
[p2 walk];//walk方法调用 //p2 = p1;//对象间赋值 //对象和函数
test(p1->age,p1->weight);//值传递,不改变原值
[p1 walk];//walk方法调用
test1(p1);//传地址,改变原值
[p1 walk];//walk方法调用 return ;
}
@interface 和@implementation分工
@interface 就相当于钟表表面
@implementation就是钟表内部的-实现
常见错误
1、只有类的声明,没有类的实现
2、漏了@end
3、@interface和@implementation嵌套
4、两个类的声明嵌套
5、成员变量没有写在括号里面
6、方法的声明写在了大括号里面
方法和函数的区别
方法:
1、方法都是以减号开头的
2、方法声明必须写在@interface和@end之间
方法定义必须写在@implementation和@end之间
3、方法只能由对象来调用
4、方法归对象/类所有
函数:
1、函数归文件所有,能写在除#interface和@end之间的任意位置
2、函数调用不依赖与对象
类的简单设计
#import <Foundation/Foundation.h>
/*
学生类:
狗类
*/ //性别
typedef enum
{
SexMan,//男
SexWoman//女
} Sex;
//生日
typedef struct
{
int year;//年
int month;//月
int day;//日
} Date;
//颜色
typedef enum
{
ColorBlack,//黑色
ColorRed,//红色
ColorGreen//绿色
} Color; //类的声明:狗
@interface Dog : NSObject
{
@public
double weight;//体重
Color curColor;//毛色
}
//方法声明
- (void) eat;//吃
- (void) run;//走 @end @implementation Dog //方法实现
- (void) eat
{
weight += ;
NSLog(@"狗吃过体重是%f",weight);
} - (void) run
{
weight -= ;
NSLog(@"狗溜过体重是%f",weight);
} @end //类的声明 :学生
@interface Student : NSObject
{
@public
Sex sex;//性别
Date birthday;//生日
double weight;//体重
Color FavColor;//最喜欢的颜色
char *name;//姓名
//狗,对象中对象,指针
Dog *dog;//OC中得其他对象必须是指针
}
//方法声明
- (void) eat;//吃
- (void) run;//走
- (void) print;//输出
- (void) walkingDog;//遛狗
- (void) feadDog;//喂狗
@end //类的实现
@implementation Student
//方法实现
- (void) eat
{
weight += ;
NSLog(@"吃过体重是%f",weight);
} - (void) run
{
weight -= ;
NSLog(@"运动过体重是%f",weight);
} - (void) print
{
NSLog(@"Sex is %d,birthday is %d-%d-%d,favourate color is %d",sex,birthday.year,birthday.month,birthday.day,FavColor); } - (void) walkingDog
{
[dog run];
}
- (void) feadDog
{
[dog eat];
}
@end int main()
{
Student *pStu = [Student new];//新建对象
pStu->dog = [Dog new];//新建狗对象
pStu->dog->weight = ;//狗的体重
pStu->dog->curColor = ColorBlack;//狗的颜色
pStu->weight = ;//学生体重 pStu->sex = SexMan;//学生性别 Date d = {,,};//学生年龄
pStu->birthday = d;//赋值 pStu->FavColor = ColorGreen;//学生最喜欢的颜色 pStu->name = "ZhangSan";//学生姓名 [pStu eat];//调用方法eat
[pStu eat];//调用方法eat
[pStu run];//调用方法run [pStu print];//调用方法print
[pStu walkingDog];//调用方法
[pStu feadDog];//调用方法feadDog
return ;
}
方法的参数
oc方法中,一个参数对应一个冒号。
- (int) pingfang:(int)num;//oc方法中,一个参数对应一个冒号. 方法名是pingfang: 包括后面的冒号。
- (int) SumwithNum1:(int)num1 andNum2:(int)num2;//冒号前可以加描述,用于理解参数。方法名是:SumwithNum1:andNum2:
#import <Foundation/Foundation.h> /*
计算器类:
返回数值n
计算平方
计算和
*/ @interface JiSuanQi : NSObject -(double) pi;
//方法名是 pingfang:
- (int) pingfang:(int)num;//oc方法中,一个参数对应一个冒号
//- (int) Sum:(int)a :(int)b;
//方法名是:SumwithNum1:andNum2:
- (int) SumwithNum1:(int)num1 andNum2:(int)num2;//冒号前可以加描述,用于理解参数
@end @implementation JiSuanQi
- (double) pi
{
return 3.14;
}
- (int) pingfang:(int)num//oc方法中,一个参数对应一个冒号
{
return num * num;
}
- (int) SumwithNum1:(int)num1 andNum2:(int)num2
{
return num1 + num2;
}
@end int main()
{
JiSuanQi *p = [JiSuanQi new];//新建对象
double d= [p pi];//调用pi方法
NSLog(@"%f",d);
int n = [p pingfang:];//调用平方方法
NSLog(@"%d",n);
//这样写比较好理解
int sum = [p SumwithNum1: andNum2:];//调用方法sum
NSLog(@"%d",sum);
return ;
}
练习2:
/*
车
方法:比较车速
*/ //
@interface Car : NSObject
{
@public
int speed;
}
- (int) comapreSpeedWithOther:(Car *)other; @end @implementation Car
- (int) comapreSpeedWithOther:(Car *)other
{
return speed - other->speed;
} @end int main()
{
Car *p1 = [Car new];
Car *p2 = [Car new];
p1->speed = ;
p2->speed = ;
int res = [p1 comapreSpeedWithOther:p2];
NSLog(@"%d",res);
return ;
}
匿名对象的使用
[Car new]->speed = 300;//匿名对象
int main()
{
//匿名对象,不要这样写,会造成内存泄露
[Car new]->speed = 300;
//不要这样写,会造成内存泄露
[[Car new] run];
return 0;
}
Xcode文档安装
1、直接找到Xcode文件路径,把离线文件复制进去
/Applications/Xcode.app/Contents/Developer/Documentation/DocSets
2、放到硬盘某路径下
/Users/用户名/Library/Developer/Shared/Documentation/DocSets
IOS开发学习笔记009-OC基本知识的更多相关文章
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- ios开发学习笔记(1)
objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...
- ios开发学习笔记(这里一定有你想要的东西,全部免费)
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- IOS开发学习笔记016-Foundation框架
Foundation 框架的学习 一.Foundation 常用结构体 1.NSRange(location,length) typedef struct _NSRange { NSUIntege ...
- IOS开发学习笔记013-内存管理
内存管理 1.基本知识 2.关闭ARC机制 3.@property 4.循环引用 5.自动释放池 6.内存管理总结 一.基本知识 内存的分类 栈:局部变量 堆:动态申请的对象,变量等 全局(静态):s ...
- iOS开发学习笔记
1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...
- IOS开发学习笔记017-第一个IOS应用
第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...
- IOS开发学习笔记014-ARC机制
ARC 1.ARC机制 2.ARC 判断准则 3.注意事项 4.ARC和非ARC混合使用 ARC机制 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器.因此 AR ...
随机推荐
- py2exe --- show error: MSVCP90.dll + matplotlib issues
问题1: show error: MSVCP90.dll: No such file or directory 创建生成exe文件的脚本添加: import py2exe from distutils ...
- Python02 变量
变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...
- CUDA 中dim3含义
- Jquery动态添加多行,返回数据至每一行中
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="sys_channel_ed ...
- Excel自动从身份证中提取生日、性别、年龄
现在学生的身份证号已经全部都是18位的新一代身份证了,里面的数字都是有规律的.前6位数字是户籍所在地的代码,7-14位就是出生日期.第17位“2”代表的是性别,偶数为女性,奇数为男性.我们要做的就是把 ...
- 对mysql快速批量修改,查重
更新UPDATE mytable SET myfield = CASE id WHEN 1 THEN 'value' WHEN 2 THEN 'value' WHEN 3 THEN 'value' E ...
- HH的项链题解(离线思想+链表+树状数组)
本人第一篇博客重磅推出!!! 希望各位朋友以后多多捧场也多给写意见(我个人喜欢把题解写得啰嗦一点,因为这样方便理解,各位巨佬勿喷) 来讲一道提高+/省选-的骚题:HH的项链(这个HH你理解成皇后呵呵哈 ...
- Duizi and Shunzi HDU - 6188 (贪心)2017 广西ACM/ICPC
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- SSH实验
跳板机实验1:本地转发 实验环境: 三台主机:A,B,C 目标A与C通过telnet连接 A主机和B,C主机之间有防火墙相隔,A与B之间可以通过SSH协议连接,BC之间可以通过telnet协议连接 环 ...
- jstl(c)标签
一.EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能.脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java 代码 ...