iOS开发进阶(八):ipa应用唤起并跳转至指定页面

Objective-C中,NSNotificationCenter是一个用于实现观察者模式的类。它允许不同的对象之间进行通信,当某个事件发生时,可以通过发送通知的方式通知其他对象。

在这个代码片段中,[NSNotificationCenter defaultCenter]表示获取默认的通知中心对象。postNotificationName:kEmmPushNotification object:data表示发送一个名为kEmmPushNotification的通知,并且传递了一个名为data的对象作为参数。

通过发送通知,其他对象可以注册成为观察者,并在接收到通知时执行相应的操作。

三、延伸阅读 OC函数与参数

Object-C的一个方法可以包含多个参数,除了第一个参数外,后面的所有参数都要写名字,这一点和其他的语言有很大的不同。

多个参数的写法

(方法数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ;

举个例子,一个方法的定义如下:

-(void) setKids: (NSString \*)myOldestKidName secondKid: (NSString \*) mySecondOldestKidName thirdKid: (NSString \*) myThirdOldestKidName;

函数实现如下:

-(void) setKids: (NSString \*)myOldestKidName secondKid: (NSString \*) mySecondOldestKidName thirdKid: (NSString \*) myThirdOldestKidName{
 
	大儿子 = myOldestKidName;
 
	二儿子 = mySecondOldestKidName;
 
	三儿子 = myThirdOldestKidName;
 
}

函数调用如下:

Kids \*myKids = [[Kids alloc] init];
 
[myKids setKids: @”C大力” secondKid: @”C二力” thirdKid: @”C小力”];

再来一个实例:

-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue;

函数调用:

[myColor changeColorToRed:5.0 green:2.0 blue:6.0];

需要注意的是,用冒号隔开的各个参数顺序是不能更改的。

另外,OC还具有以下特点:

  1. objective-c使用 nil 来表示 NULL
  2. objective-c用 YES NO 来表示 true false;
  3. objective-c#import<stdio.h> 而不是#include<stdio.h>来包含头文件;
  4. objective-c中,称类的方法(method)为消息(message)。在C++中,这样来调用方法: aClass->function(var); 但是在objective-c中,使用 [aClass function:var]

objective-c中的消息(message)比较有意思的特点是:

  1. 调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类;
  2. 调用消息的类可以是nil。在C++中,在使用类方法之前,都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如if (var) { delete var; } 但是在objective-c中,可以直接写[var release]; 即使var == nil, 也不会有问题。

先写个hello world

#import <stdio.h>

int main( int argc, char\* argv[] ) {

	printf( "hello world\n" );
	
	return 1;

}

确实跟C很像吧。但是也不其然,objective-c是一个很好的面向对象的语言。跟C还是有挺多不同之处。

我们先实现一个简单的类。

// Sample.h

#import <Foundation/NSObject.h>

@interface Sample: NSObject {

	int a;

}

- (void) print;

- (void) setA: (int)a;

@end

逐句解析下。

#import <Foundation/NSObject.h>

在objective-c中,所有的类都必须继承NSObject,这个概念很像Java里面的Object

objective-c声明类的格式如下:

@interface className: baseClassName {
	member variables;
}
member functions
@end

objective-c函数声明的基本格式如下

-/+ (return type) function_name;

-/+ (return type) function_name : (parameter type) parameter;

-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;

  1. -/+: 这个称做scope, 如果在函数前面是- ,那么理解为一般函数;如果是+, 可以理解为**c++**中的static函数
  2. 函数参数声明: objective-c和 c++, java都很不一样。如果没有参数的话,在函数名后面,可以什么都不写;如果只有一个参数,在 : 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个 : , 然后接着是参数类型和参数值。

比如上面这个例子中, otherParameter 这个东西是干什么的呢?在objective-c中,对于有多个参数的函数,可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。比如在C++中:void initializeRectangle(int x1, int y1, int x2, int y2) , 但是我们并不知道这些参数都是什么意思;但是在objective-c中,可以这样声明:void initializeRectangeWithLeftUpX: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2 RightBottomY:(int)y2;

下面来实现这个简单的Sample类

// sample.m
#import <stdio.h>
#import "Sample.h"
@implementation Sample

- (void) print {
	printf( "%d\n", a );
}

- (void) setA : (int) aa {
	a = aa;
}
@end

使用这个类

#import "Sample.h"
int main( int argc, char\* argv[] ) {
	Sample\* smp = [[Sample alloc] init];
	[smp setA:1];
	[smp print];
	[smp release];
}

objective-c中,每一个类对象都是一个指针,这和Java差不多(每个类的对象都用new声明)。alloc类似于C中的malloc, initNSObject中的方法,用于初始化这个对象。如果实现了自己的初始化方法,也可以调用自己的初始化方法。

切记⚠️:使用完毕后,需要调用release释放空间。

四、拓展阅读

总结

我在成长过程中也是一路摸爬滚打,没有任何人的指点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

image
如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

[外链图片转存中…(img-HADbE6gO-1718766476422)]
image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值