1.类的定义:

类=属性+方法;

-属性代表类的特征

-方法是类能对变化做出的反应

类定义的格式:类的声明和类的实现组成

-接口(类的声明):@interface 类名:基类的名字

.类名首字母要大写

.冒号表示继承关系,冒号后面的是类的父类

.NSObject是OC所有类的基类

.类的声明放在“类名+.h”文件中,要由两部分组成:实例变量和方法

-实现(类的实现):@implementation类名

.方法实现

-都用@end结束c

2.类的使用:

OC中,对象通过指针来声明   如:ClassA *object;

OC中对象的创建,使用alloc来创建一个对象,编译器会给object对象分配一块可用的内存地址,然后需要对对象进行初始化即调用init方法,这样这个对象才可以使用,如:

Person *person=[Person alloc];      //创建对象分配空间

person=[person init];               //初始化赋初值,

初始化后:int=0,char=“*0”?,bool=FALSE

同一个类的每个对象有不同的实例变量的存储空间

同一类的每个对象共享该类的方法

方法嵌套的形式来调用,如:ClassA *object=[[ClassA alloc] init];

3.类的访问权限

三种访问权限:

-公有的:@public

-私有的:@private

-保护的:@protected

属性默认的权限是保护的

方法默认的权限是公有的

4.方法定义

无参无返: -(void)print;

无参有返: -(Person *)register;

有参无返: -(void)intuit:(int)newId;

有参有返: -(Person *)init:(int)newId;

带一个参数的方法

-(Person *) init:(int) newID;

带两个参数的方法:

-(Person *) init:(int) newID:(int) newAge;

“:”是方法名的一部分

-第一个方法名:init

-第二个方法名:init:

-第三个方法名:init::

多参数方法定义:

-(Person *)initWithId:(int) newID andAge:(int) newAge andName:(NSString *)name;

可以在方法名前面加任意标记如“WithId”,“andAge”,“andName”以此类推

5.实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建对象,即实例化对象
Dog *haShiQi=[[Dog alloc]init];
//方法调用
[haShiQi bark];
//属性赋值
haShiQi->health=120;
haShiQi->name=@"哈士奇";
NSLog(@"狗的姓名:%@,健康值%d",haShiQi->name,haShiQi->health);
}
return 0;

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
NSLog(@"汪汪");
}
@end

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject //声明类Dog,继承根基类NSObject
//类的属性
{
@public; //设置类的属性为公有(一般不允许使用)
NSString *name;
int health;
}
//对象方法
-(void)bark;
@end 

6.类方法和对象方法对比

·对象方法(实例方法)

-以减号“-”开头

-只能让对象调用,没有对象,这个方法根本不可能被执行

-对象方法能访问实例变量

·类方法

-以加号“+”开头

-只能用类名调用,对象不能调用

-类方法中不能访问实例变量(成员变量)

-使用场合:当不需要访问成员变量的时候,尽量用类方法

-类方法和对象方法可以同名7.属性的存取方法

·获取属性值(getter)方法的定义

-作用:返回对象内部的成员变量

-命名规范:get方法的名称一般就跟成员变量同名

·设置属性的值(setter)方法的定义

-作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

-命名规范:

-方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写

-形参名称不要跟成员变量同名

8.getter,setter方法实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建对象,即实例化对象
Dog *haShiQi=[[Dog alloc]init];
//方法调用
[haShiQi bark];
//属性赋值
[haShiQi setName:@"哈士奇"]; //调用setter方法赋值
[haShiQi setHealth:120];
NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
}
return 0;
}

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
NSLog(@"汪汪");
}
//setter方法
-(void)setName:(NSString *)newName{
name=newName;
}
//getter方法
-(NSString *)name{
return name;
}
//setter方法
-(void)setHealth:(int)newHealth{
health=newHealth;
}
//getter方法
-(int)health{
return health;
}
@end 

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject //声明类Dog,继承根基类NSObject
//类的属性
{
NSString *name;
int health;
}
//对象方法
-(void)bark;
-(void)setName:(NSString *)newName; //setter方法
-(NSString *)name; //getter方法
-(void)setHealth:(int)newHealth;
-(int)health;
@end

9.自动生成属性的存取方法

·@property语法

·@synthesize

·封装的好处:

-过滤不合理的值

-屏蔽内部的赋值过程

-让外界不必关注内部的细节

10.自动生成属性的存取方法实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建对象,即实例化对象
Dog *haShiQi=[[Dog alloc]init];
//方法调用
[haShiQi bark];
//属性赋值
[haShiQi setName:@"哈士奇"];
[haShiQi setHealth:120];
NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
}
return 0;
}

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
NSLog(@"汪汪");
}
@synthesize name,health; //封装,代替了setter,getter
@end

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject //声明类Dog,继承根基类NSObject
//类的属性
{
@public; //设置类的属性为公有
NSString *name;
int health;
}
-(void)bark;
@property int health; //封装,代替了setter,getter
@property NSString *name;
@end

11.方法重载

·OC中不是严格的函数重载

命名冲突:

-(int)doSomething(int)X;

-(int)doSomething(float)X;

命名冲突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(float)x:(int)y;

不冲突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(int)x: andY:(float)y;

因为一个是“doSomething:”,“另一个是doSomething::”

12.继承

·不改变原来模型的基础上,拓充方法

·建立了类与类之间的联系

·抽取了公共代码

·减少冗余代码

·坏处:耦合性强

IOS开发之基础oc语法的更多相关文章

  1. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  2. IOS开发UI基础--数据刷新

    IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...

  3. iOS开发——高级技术OC篇&运行时(Runtime)机制

    运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...

  4. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  5. 【IOS】IOS高速入门之OC语法

    Objective-C 是 C 语言的超集 您还能够訪问标准 C 库例程,比如在stdlib.h和stdio.h中声明的那些例程. Objective-C 还是一种很动态的程序设计语言,并且这样的动态 ...

  6. iOS开发——UI篇OC篇&SpriteKit详解

    SpriteKit详解 SpriteKit,iOS/Mac游戏制作的新纪元 这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或 ...

  7. iOS开发-UI基础Demo

    现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...

  8. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

  9. iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍

    UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...

随机推荐

  1. gevent实现并发

    #_author:来童星#date:2019/12/12import geventimport timedef func1(): print('\033[31;1mfun1 starting...\0 ...

  2. 使用Intellij中的Spring Initializr来快速构建Spring Boot工程

    本文将介绍嵌入的Intellij中的Spring Initializr工具,它同Web提供的创建功能一样,可以帮助我们快速的构建出一个基础的Spring Boot/Cloud工程. 1.菜单栏中选择F ...

  3. js 实现 map 工具类

    /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, v ...

  4. Tomcat点击项目名称,加载一个action请求

    <meta http-equiv="refresh" content="0;url=index.action">

  5. 安装MySQL出现的this application

    1,https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1385 2,安装Windows 图像组件 (WIC)以及NET Fra ...

  6. Django杂篇(2)

    目录 Django杂篇(2) cookie与session cookie session django中间件 自定义中间件 跨站请求伪造(csrf) CSRF的解决方案 Django杂篇(2) 本文主 ...

  7. Mybatis Resultmap 简化之超级父类

    我们在写 mybatis多表关联查询的时候 ,要配置  resultmap ,实在太麻烦.而这个超级父类 可以省去我们查询多表时的map public class SuperPojo extends ...

  8. C# 中的三个高级参数 params

    params params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组. 还可以不发送参数. 在方法声明中的 params 关键 ...

  9. 使用github作为远程仓库的常见git操作

    [git上传本地代码到github新建仓库]一.建立git本地仓库 1.在本地目标文件夹(Code)中执行命令: git init //初始化本地仓库二.将上传到github的项目文件添加到本地仓库中 ...

  10. sqllocaldb

    创建实例  sqllocaldb create v12.0 启动实例 sqllocaldb start v12.0