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. windows cmd command

    ////////////////// ===>windows + r //gpedit.msc 用户组策略 ///////////////// ===>cmd //ping www.bai ...

  2. 概率dp——期望水题hdu4405

    还是逆推,如果遇到跳板直接继承目标地的期望即可 #include<bits/stdc++.h> using namespace std; #define maxn 200005 doubl ...

  3. linux下phpstudy安装

    linux下phpstudy安装 一.总结 一句话总结: 就是下载然后一步步用指令安装即可 二.linux下phpstudy安装 参考:linux下phpstudy安装https://www.cnbl ...

  4. selenium python bindings 项目结构总结

    一个合理的文档结构在import的过程中会避免很多错误,踩完坑来记录. webtests/ framework.py webdriver.py test_file.py module/ __init_ ...

  5. 数据库小技巧:使用distinct去除重复行

    这里有2个表 问题question表 楼层question_floor表 需求:已知某用户的id为uid,实现“我的回复”功能,即查看我回复的所有问题 遇到的问题:如果直接对question表和que ...

  6. NEO4J全文检索架构

    NEO4J全文检索架构 一.有大量存量数据(亿级以上)(并长期有增量数据进入) 二.无大量存量数据或者少量存量数据(或全部为增量数据) 三.架构方案选择优先级 以下方案,是根据实践总结的基于NEO4J ...

  7. 一个tcp连接可以发多少http请求

    -----来自:松若章 -----zhuanlan.zhihu.com/p/61423830 曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学 ...

  8. python库参考学习网址

    https://github.com/china-testing/python-api-tesing 这里有很多python库参考

  9. Java驼峰和下划线互相转化

    直接上代码 : package com.utils; public class ChangeChar { public static final char UNDERLINE = '_'; publi ...

  10. synchronized ReentrantLock 比较分析

    在编写多线程代码的时候,对于不允许并发的代码,很多需要加锁进行处理.在进行加锁处理时候,synchronized作为java的内置锁,同时也是java关键字,最为被人熟知,即使是最初级的java程序员 ...