(一)构造函数

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基本知识的更多相关文章

  1. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  2. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  3. Swift 基础部分(建议掌握OC字符串知识的翻阅)

    更新说明: Swift 目前已经发布到4.0版本了,以前写的这整个Swift学习系列的文章,有很多的不足之处,我会重新整理整个系列文章,也是相当于重新复习一遍Swift,后面系列文章的改动之处全都会做 ...

  4. c和oc小知识

    1.const const 修饰了*p1 / *p2 const int * p1=&age; int const * p2=&age;//和上面的意义一样 ,换句话说就是 在 “ * ...

  5. 开启Objective-C --- OC基础知识

    一.Objective-C简述      Objective-C通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.Objective-C主要用于:编写iOS操作 ...

  6. oc 基础知识

    一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex;   tydedef struct{    int year;    int month;    int da ...

  7. OC - 2.OC基础知识介绍

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

  8. OC准备知识

    #import 与 #include区别 include完成头文件的导入,可能会导致头文件的相互引用和函数或变量的重复定义 为了解决这个问题 我们必须这样做 #ifndef Student_h #de ...

  9. OC之知识储备篇

    1. Objective-C是基于C语言的. a. 在C语言的基础之上新增了面向对象的语法. b. 将C语言中复杂的.繁琐的语法封装的更为简单. 2. Objective-C程序的源文件的后缀名.m  ...

  10. 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. ...

随机推荐

  1. Spring Data JPA 梳理 - JPA与“Spring、Spring Data JPA”的关系

    JPA其实也就是java实体对象和关系型数据库建立起映射关系,通过面向对象编程的思想操作关系型数据库的规范. Spring 框架对 JPA 提供的支持主要体现在如下几个方面: 首先,它使得 JPA 配 ...

  2. Java之字符流读写文件、文件的拷贝

    字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int d ...

  3. 【ADO.NET基础】——数据库连接

    SQL Sever连接字符串 (1)标准的安全连接 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername; ...

  4. React的diff算法(译文)

    前言  此篇文章主要是因为在看Virtual DOM(虚拟DOM)的时候看到的主要讲的是实现Virtual Dom 的diff算法,原文地址:https://calendar.perfplanet.c ...

  5. Go中使用seed得到相同随机数的问题

    1. 重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象. func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now( ...

  6. InnoDB体系结构

    1.前言 整理了下InnoDB体系结构,方便以后更简单的理解 2.思维导图 参考: https://www.cnblogs.com/tangshiguang/p/6741035.html https: ...

  7. 设计模式----创建型型模式之单件模式(Singleton pattern)

    单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...

  8. 视频作品《springboot基础篇》上线了

    1.场景描述 第一个视频作品出炉了,<springboot基础篇>上线了,有需要的朋友可以直接点击链接观看.(如需购买,请通过本文链接购买) 2. 课程内容 课程地址:https://ed ...

  9. python urllib2实现http GET PUT DELETE POST的方法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/3/11 下午8:33 # @Author : liubing # @File ...

  10. 《java编程思想》P125-P140(第七章复用类部分)

    1.类的成员默认的是包访问权限.允许包内成员访问 2.super.scrub() 调用基类的scrub方法 3.继承并不是复制基类的接口.当创建了一个导出类(子类)对象时,该对象包含了一个基类的子对象 ...