(一)构造函数

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. jquery的api以及用法总结-选择器

    jQuery API及用法总结 选择器 基本选择器 * 通用选择器 .class 类选择器,一个元素可以有多个类(chrome使用原生js函数getElementByClassName()实现) 利用 ...

  2. Android导入Burp Suite证书抓包HTTPS

    需求 Android APP安全测试时,主要工作分为: APK安全 业务安全 APK安全这里不讨论,我说说业务安全,因为大部分的业务校验逻辑还是放在Servier端,这里就会涉及到网络通信了.因此网络 ...

  3. 读《深入理解Elasticsearch》点滴-查询评分

    计算文档得分的因子: 文档权重(document boost):索引期赋予某个文档的权重值 字段权重(field boost):查询期赋予某个文档的权重值 协调因子(coord):基于文档中词项个数的 ...

  4. .net core 3.0 Signalr - 04 使用Redis做底板来支持横向扩展

    在实际的系统中,可能需要多台机器部署;然而,Signalr的连接信息是跟站点走的,举个例子 推送系统部署了A.B两个服务器,张三访问A服务器,李四访问B服务器,当张三通过A服务器向李四推送的时候,A服 ...

  5. Basic Example using SMTP (for PHPMailer v5.0.0 and up)

    sample as below: require_once('../class.phpmailer.php'); //include("class.smtp.php"); // o ...

  6. 深入Dapper.NET源码 (文长)

    目录 前言.目录.安装环境 Dynamic Query 原理 Part1 Dynamic Query 原理 Part2 Strongly Typed Mapping 原理 Part1 : ADO.NE ...

  7. 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...

  8. 使用Ingress来负载分发微服务

    目录 使用Ingress来负载分发微服务  Demo规划  准备Demo并完成部署  创建部署(Deployment)资源  创建服务(Service)资源  创建Ingress资源并配置转发规则  ...

  9. Zookeeper工作过程详解

    一.Zookeeper工作机制 分布式和集中式系统相比,有很多优势,比如更强的计算能力,存储能力,避免单点故障等问题.但是由于在分布式部署的方式遇到网络故障等问题的时候怎么保证各个节点数据的一致性和可 ...

  10. ELK 学习笔记之 Logstash之inputs配置

    Logstash之inputs配置: input plugin doc: https://www.elastic.co/guide/en/logstash/current/index.html 插件很 ...