oc基本知识
(一)构造函数
h文件
#import <Foundation/Foundation.h> @interface Student : NSObject
{
NSString *_name;
NSString *_id;
} -(instancetype) initWithName:(NSString *)name ID:(NSString *) idNum; -(void) showInfo; @end
m文件
#import "Student.h" @implementation Student -(instancetype) initWithName:(NSString *)name ID:(NSString *) idNum
{
if([super init])
{
_name=name;
_id=idNum;
} return self;
} -(void) showInfo
{
NSLog(@"Student name:%@,id:%@",_name,_id);
} @end
调用
#pragma 构造函数
Student *s=[ [Student alloc] initWithName:@"Andy" ID:@""];
[s showInfo];
(二)block
block为可以实现特定功能的模块,跟C#中采用lamda表达式定义的委托相似
block定义
typedef int (^BlockDef)(int,int);
block使用
#pragma block 类似C#中用lamd定义的委托
BlockDef sumBlock=^(int a,int b)
{
return a+b;
};
NSLog(@"Block get sum:%d",sumBlock(,));
(三)协议protocol
类似于C#中的接口
定义,protocol只需要定义方法,在继承此协议的类中去实现
@protocol MyProtocol <NSObject> @required//必须实现
-(void) method1;
-(void) method2; @optional//可以不实现
-(void) method3; @end
定义一个类去继承上述协议并实现此协议
#import <Foundation/Foundation.h>
#import "MyProtocol.h" @interface Worker : NSObject <MyProtocol> @end
#import "Worker.h" @implementation Worker -(void)method1
{
NSLog(@"Protocol method1");
} -(void)method2
{
NSLog(@"Protocol method2");
}
@end
使用
#pragma protocol 类似接口
Worker *w = [Worker new];
[w method1];
[w method1];
(四)分类
通过分类可以实现方法的扩展,扩展原生的类,可以实现增加方法,方便协作,如下类为person类,通过PersonPP(文件名)对其进行分类扩展,语法为Person(分类名)
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject
{
NSString *test;
@public
NSString *_name;
NSString *_num;
} @end
Person.m
#import "Person.h" @implementation Person //-(void) dealloc
//{
// NSLog(@"Dealloc");
// [super dealloc];s
//} //-(void) push
//{
//NSLog(@"Extented %@ push",_name);
//} @end
PersonPP.h
#import <Foundation/Foundation.h>
#import "Person.h" @interface Person(plus) -(void) punch; @end
PersonPP.m
#import "PersonPP.h" @implementation Person(plus) -(void) punch
{
NSLog(@"Person %@ punched",_name);
} @end
main中调用
#pragma 分类:创建类的一个分支(扩展原类),可以访问原来类的公共变量,具有可继承性
Person *p=[Person new];
p->_name=@"Andy";
[p punch];//Person.h中无此方法,痛殴PersonPP.h扩展了Person类
(五)扩展类
类扩展与分类类似,类扩展只要扩展头文件即可,方法在原类中实现,还是以上述(四)中的Person类为例,语法为Person()
扩展头文件PersonExt.h
#import <Foundation/Foundation.h>
#import "Person.h" @interface Person()
{
@public
int _age;
} -(void) push; @end
扩展头文件中,增加了push方法,所以在person.m中可以直接实现,见(四)中Person.m中注视掉的push方法
#pragma 类扩展 类名 +()
//第一种扩展方法:新建头文件PersonExt.h,定义扩展方法,在Person.m中实现此方法,此时p1可访问PersonExt.h中的变量
Person *p1=[Person new];
p1->_name=@"Andy";
[p1 push];
//第er种扩展方法:将文件PersonExt.h内容直接写入Person.m中,并在Person.m中实现扩展方法,此时p1无法访问PersonExt.h中的变量
//-----------main.m----------------//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Student.h"
#import "Person.h"
#import "Worker.h"
#import "PersonPP.h"
#import "PersonExt.h" typedef int (^BlockDef)(int,int); int main(int argc, char * argv[]) {
@autoreleasepool { #pragma 构造函数
Student *s=[ [Student alloc] initWithName:@"Andy" ID:@""];
[s showInfo]; #pragma 计数器(自动释放内存模式不做处理)
//Person *p=[Person new];
//NSLog(@"Count:%lu",p.retainCount);
//[p release];
#pragma block 类似C#中用lamd定义的委托
BlockDef sumBlock=^(int a,int b)
{
return a+b;
};
NSLog(@"Block get sum:%d",sumBlock(,)); #pragma protocol 类似接口
Worker *w = [Worker new];
[w method1];
[w method1]; #pragma 分类:创建类的一个分支(扩展原类),可以访问原来类的公共变量,具有可继承性
Person *p=[Person new];
p->_name=@"Andy";
[p punch];//Person.h中无此方法,痛殴PersonPP.h扩展了Person类 #pragma 类扩展 类名 +()
//第一种扩展方法:新建头文件PersonExt.h,定义扩展方法,在Person.m中实现此方法,此时p1可访问PersonExt.h中的变量
Person *p1=[Person new];
p1->_name=@"Andy";
[p1 push];
//第er种扩展方法:将文件PersonExt.h内容直接写入Person.m中,并在Person.m中实现扩展方法,此时p1无法访问PersonExt.h中的变量 return ;
//return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
oc基本知识的更多相关文章
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)
自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...
- Swift 基础部分(建议掌握OC字符串知识的翻阅)
更新说明: Swift 目前已经发布到4.0版本了,以前写的这整个Swift学习系列的文章,有很多的不足之处,我会重新整理整个系列文章,也是相当于重新复习一遍Swift,后面系列文章的改动之处全都会做 ...
- c和oc小知识
1.const const 修饰了*p1 / *p2 const int * p1=&age; int const * p2=&age;//和上面的意义一样 ,换句话说就是 在 “ * ...
- 开启Objective-C --- OC基础知识
一.Objective-C简述 Objective-C通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.Objective-C主要用于:编写iOS操作 ...
- oc 基础知识
一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex; tydedef struct{ int year; int month; int da ...
- OC - 2.OC基础知识介绍
一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...
- OC准备知识
#import 与 #include区别 include完成头文件的导入,可能会导致头文件的相互引用和函数或变量的重复定义 为了解决这个问题 我们必须这样做 #ifndef Student_h #de ...
- OC之知识储备篇
1. Objective-C是基于C语言的. a. 在C语言的基础之上新增了面向对象的语法. b. 将C语言中复杂的.繁琐的语法封装的更为简单. 2. Objective-C程序的源文件的后缀名.m ...
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...
随机推荐
- Spring Data JPA 梳理 - JPA与“Spring、Spring Data JPA”的关系
JPA其实也就是java实体对象和关系型数据库建立起映射关系,通过面向对象编程的思想操作关系型数据库的规范. Spring 框架对 JPA 提供的支持主要体现在如下几个方面: 首先,它使得 JPA 配 ...
- Java之字符流读写文件、文件的拷贝
字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int d ...
- 【ADO.NET基础】——数据库连接
SQL Sever连接字符串 (1)标准的安全连接 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername; ...
- React的diff算法(译文)
前言 此篇文章主要是因为在看Virtual DOM(虚拟DOM)的时候看到的主要讲的是实现Virtual Dom 的diff算法,原文地址:https://calendar.perfplanet.c ...
- Go中使用seed得到相同随机数的问题
1. 重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象. func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now( ...
- InnoDB体系结构
1.前言 整理了下InnoDB体系结构,方便以后更简单的理解 2.思维导图 参考: https://www.cnblogs.com/tangshiguang/p/6741035.html https: ...
- 设计模式----创建型型模式之单件模式(Singleton pattern)
单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...
- 视频作品《springboot基础篇》上线了
1.场景描述 第一个视频作品出炉了,<springboot基础篇>上线了,有需要的朋友可以直接点击链接观看.(如需购买,请通过本文链接购买) 2. 课程内容 课程地址:https://ed ...
- python urllib2实现http GET PUT DELETE POST的方法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/3/11 下午8:33 # @Author : liubing # @File ...
- 《java编程思想》P125-P140(第七章复用类部分)
1.类的成员默认的是包访问权限.允许包内成员访问 2.super.scrub() 调用基类的scrub方法 3.继承并不是复制基类的接口.当创建了一个导出类(子类)对象时,该对象包含了一个基类的子对象 ...