NSdictionary filter Null

iOS逆向实战:Frida Thread.backtrace函数调用链追踪技术详解 在软件逆向工程与安全分析领域,动态分析技术是理解程序运行时行为的关键手段。其核心原理在于通过代码注入和Hook技术,在目标进程执行时实时监控和修改其指令流,从而揭示隐藏的业务逻辑、加密算法或漏洞点。这项技术的核心价值在于能够绕过静态混淆和加密,直接观察程序的实际执行路径,广泛应用于恶意软件分析、漏洞挖掘、协议逆向和移动应用安全评估等场景。其中,调用堆栈(Call Stack)追踪是动态分析中定位问题根源的核心技术,它能够完整还原函数执行的上下文关系链。本文聚焦于iOS平台,深入探讨如何利用Frida框架的T 阅读详情

@interface NSDictionary (NullReplacement)

- (NSDictionary *)dictionaryByReplacingNullsWithBlanks;

@end
import "NSDictionary+NullReplacement.h"
#import "NSArray+NullReplacement.h"

@implementation NSDictionary (NullReplacement)

- (NSDictionary *)dictionaryByReplacingNullsWithBlanks {
    const NSMutableDictionary *replaced = [self mutableCopy];
    const id nul = [NSNull null];
    const NSString *blank = @"";

    for (NSString *key in self) {
        id object = [self objectForKey:key];
        if (object == nul) [replaced setObject:blank forKey:key];
        else if ([object isKindOfClass:[NSDictionary class]]) [replaced setObject:[object dictionaryByReplacingNullsWithBlanks] forKey:key];
        else if ([object isKindOfClass:[NSArray class]]) [replaced setObject:[object arrayByReplacingNullsWithBlanks] forKey:key];
    }
    return [NSDictionary dictionaryWithDictionary:[replaced copy]];
}

@end
@interface NSArray (NullReplacement)

- (NSArray *)arrayByReplacingNullsWithBlanks;

@end
#import "NSArray+NullReplacement.h"
#import "NSDictionary+NullReplacement.h"
@implementation NSArray (NullReplacement)

- (NSArray *)arrayByReplacingNullsWithBlanks  {
    NSMutableArray *replaced = [self mutableCopy];
    const id nul = [NSNull null];
    const NSString *blank = @"";
    for (int idx = 0; idx < [replaced count]; idx++) {
        id object = [replaced objectAtIndex:idx];
        if (object == nul) [replaced replaceObjectAtIndex:idx withObject:blank];
        else if ([object isKindOfClass:[NSDictionary class]]) [replaced replaceObjectAtIndex:idx withObject:[object dictionaryByReplacingNullsWithBlanks]];
        else if ([object isKindOfClass:[NSArray class]]) [replaced replaceObjectAtIndex:idx withObject:[object arrayByReplacingNullsWithBlanks]];
    }
    return [replaced copy];
}

@end

JavaScript函数本质:执行上下文、this绑定与参数机制深度解析 JavaScript函数远不止是代码封装单元,其核心是执行上下文、作用域链、this绑定和闭包构成的运行时系统。理解function声明与箭头函数在this绑定、arguments支持及构造能力上的根本差异,是规避常见报错(如undefined this、arguments不可用)的关键。参数机制上,剩余参数(...args)替代类数组arguments,提供真正的数组能力;而默认参数与解构赋值则构建了防御性函数的基础。这些原理直接支撑现代工程实践——从React中useCallback避免重复创建函数,到 阅读详情

相关推荐

JavaScript函数本质:从定义方式到运行时机制深度解析

JavaScript函数不仅是可执行代码块,更是具备词法环境、this绑定、闭包能力的一等公民。其核心原理涉及执行上下文创建、词法作用域继承、参数映射表构建及V8引擎的FunctionAllocation机制。不同定义方式(声明式、表达式、箭头函数、Function构造器)对应不同的运行时契约,直接影响hoisting行为、this指向、构造能力与调试体验。技术价值在于规避undefined is not a function、this丢失、堆栈混乱等高频线上问题;典型应用场景包括事件处理器绑定、类方法传递

weixin_33709364的博客 453

处理从服务返回的NSDictionary值为NSNull或者<null>问题

在APP开发过程中,我们有时候要从服务器加载数据时,一般是都是用json或者xml解析后用NSDictionary保存,但是从服务器加载过来的数据直接使用时会崩溃,是因为在NSDictionary中的某个值为或者NSnull ,但是我们用一般的检查根本检查不出来,如 if( [obc objectForKey:key]==nil) 没有效果,这时候就要对NSDictionary的中值做处理了,把N

HookyStudent的专栏 4499

手把手教你用STM32CubeMX和HAL库驱动MT6835磁编码器(SPI读取21位角度)

本文详细介绍了如何使用STM32CubeMX和HAL库驱动MT6835磁编码器,通过SPI接口读取21位高精度角度数据。从硬件准备、CubeMX配置到HAL库驱动实现与优化,提供了完整的实战指南,帮助开发者快速掌握磁编码器的应用技巧,适用于机器人关节和精密仪器等高精度场景。

weixin_28716769的博客 439

java filter null_Spring在Java Filter注入Bean为Null的问题解决

在Spring的自动注入中普通的POJO类都可以使用@Autowired进行自动注入,但是除了两类:Filter和Servlet无法使用自动注入属性。(因为这两个归Web容器管理)可以用init(集承自HttpServlet后重写init方法)方法中实例化对象。解决方法:其中涉及到五种Spring实例化容器对象:方法一(这种方式不符合Web工程,不要使用):在初始化时保存ApplicationCo...

weixin_36485321的博客 873

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 671

Intel网卡固件烧录实战:eeupdate与bootutil命令完全解析

固件作为硬件设备底层运行的软件,其稳定性直接决定硬件功能的完整性。网卡固件一旦损坏,常表现为MAC地址丢失、PXE启动失效、NVM数据异常导致降速或掉线。维护这类问题,需借助Intel官方工具eeupdate与bootutil在UEFI Shell或DOS环境下执行底层烧录操作。eeupdate负责网卡的身份信息与NVM存储管理,可重置MAC、恢复固件镜像;bootutil则专管启动行为,支持PXE配置与Boot Agent升级。从环境准备、命令参数到故障恢复,掌握这两款工具能让运维人员在修复存量网卡、应对

weixin_34269583的博客 312

[iOS]NSDictionary处理取出的Value为NSNull导致有闪退风险的问题

后端处理很多类型的数据为空时,很多时候是直接返回null,导致前端解析数据后得到的一些Value为NSNull,这将会导致程序中产生一些闪退情况。 - (void)viewDidLoad { [super viewDidLoad]; NSMutableDictionary *tempDict = [NSMutableDictionary new]; [tempDict ...

Gamin 5015

Spring AI实现RAG(检索增强生成)详解与实践

支持多种文件格式的文档加载实现高效的向量存储和检索构建智能的问答系统提供可追溯的知识服务RAG技术为AI应用提供了强大的知识增强能力,使得模型能够基于实际文档生成准确、可靠的回答。

beiduofen2011的专栏 1238

iOS之NSDictionary使用集合和各种为空判断

========JSON字符串转换成字典======== NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData ...

代码解释生活 5937

腾讯Octop:Windows本地AI助手一键安装实战指南

本地AI助手是面向普通用户在个人设备上运行大语言模型的轻量级解决方案,其核心原理在于封装模型加载、推理调度与Web交互等底层复杂性,通过预编译运行时、自适应硬件加速和图形化配置降低使用门槛。技术价值体现在免环境依赖、离线可用、开箱即用,显著提升非开发者在专利撰写、文案生成、技术文档处理等办公场景中的生产力。本文聚焦Windows平台下的腾讯Octop工具,结合qwen2-7b-instruct、phi-3-mini等主流GGUF量化模型,详解安装适配、API集成与专利辅助工作流,覆盖从零部署到工程落地的完整

weixin_29055137的博客 305

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 204

【iOS开发】NSDictionary 判空处理

NSDictionary字典 判空处理+ (BOOL)isNullToDictionary:(NSDictionary *)dict { if (dict != nil && ![dict isKindOfClass:[NSNull class]] && dict.count != 0){ return NO; }else{ return YES; }

Hanrovey Blog 3595

RK3568 Android14 调试 RTL8211F 千兆以太网 (RGMII)

调试 RTL8211F 的核心在于:确认地址(看电阻贴片情况)和 搞定延时(配置 rgmii-id 或微调 delay 值)。一旦这两点对上了,RK3568 的千兆网络就能稳定运行。希望这篇结合原理图的实战记录能帮到你!

qq_33427070的博客 1648

Jasna AI 视频马赛克去除完全实践:2160p 三分钟 22 秒的视频,1 分 03 秒修完,免费功能够日常用

Jasna 是一款免费的 AI 视频马赛克修复工具:把解码、马赛克检测、画面重建、编码整条链路跑在你自己的显卡上,官方 RTX 5090 基准里一段 3 分 22 秒的 2160p 视频 1 分 03 秒出片,核心功能免费。 ## 开工前:三个问题,3 分钟给答案 能不能跑、要不要花钱、首次要等多久——这三个问题的答案,决定了你是否该往下读。 ### 显卡与系统要求速查 下面这张表是"及格

gitblog_00232的博客 306

ROS从入门到精通2-1:机器人3D可视化工具——Rviz

本文详细介绍了Rviz是什么?为什么要使用这个工具?清晰地列出了Rviz的安装流程和界面的基本功能元素;讲解了Rviz基本数据类型与话题,并用两个实例深入理解Rviz数据可视化的过程

FRIGIDWINTER的博客 5346

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vortex 扩展开发指南:深入理解 @nexusmods/vortex-api 扩展 API 与游戏扩展实战

本文基于 [packages/vortex-api/README.md](https://link.gitcode.com/i/a0b698b09148e79f9356fe253ac65723) 展开,系统讲解 Vortex(Nexus Mods 出品的 mod 管理器)扩展 API 的定位、安装方式、扩展工程结构、`IExtensionContext` 注册体系、生命周期事件,以及如何注册游戏支

gitblog_00622的博客 1005

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Sequel Pro深度解析:macOS原生MySQL管理工具的技术架构与实战指南

在macOS开发者的日常工作中,数据库管理工具的选择往往决定了开发效率的天花板。想象这样一个场景:凌晨2点,你正在紧急修复生产环境的数据问题,Navicat卡顿无响应,MySQL Workbench的复杂界面让你眼花缭乱,而DBeaver的Java运行时又消耗着宝贵的内存资源。这时,一个轻量级、响应迅速且深度集成macOS生态的数据库工具就显得尤为重要——这正是Sequel Pro诞生的初衷。

gitblog_00931的博客 228

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ORSSerialPort管理器深度解析:自动检测设备与端口管理

ORSSerialPort是一款专为macOS应用设计的Objective-C和Swift串口库,其核心组件ORSSerialPortManager提供了强大的设备检测与端口管理功能,让开发者能够轻松实现串口设备的自动发现、连接监控和高效管理。 ## 📌 核心功能概览:为什么选择ORSSerialPortManager? ORSSerialPortManager作为单例类(每个应用一个实例)

gitblog_00819的博客 426

Matter TV 示例实战:在 connectedhomeip 中为 Android 内容应用接入 Matter Agent 服务

本文以 connectedhomeip(Matter,原 Project CHIP)仓库中 `examples/tv-app` 的 Android 内容应用示例(`content-app`)为主体,完整讲解一个支持 Matter 投屏(casting)的内容应用如何接入 Android 平台上的 Matter Agent 服务:从声明权限、注册命令接收器,到绑定 AIDL 服务、动态上报集群(cl

gitblog_00045的博客 712

react-toolbox Tooltip 高阶组件完整指南:装饰任意组件的悬停提示方案

Tooltip 是 react-toolbox 提供的一个高阶组件(HOC),用于在任意组件上以悬停方式展示附加信息。它以**装饰器**(decorator)的形式包裹目标组件,并额外暴露了工厂函数 `tooltipFactory`,方便开发者创建带自定义默认属性的专属装饰器。阅读本文后,你将掌握 Tooltip 的安装引入、属性配置、位置计算原理、主题定制以及基于点击的移动端交互方案。 ##

gitblog_00481的博客 386

混合开发架构解析:Radiant Player的桥接与模块化设计

混合开发是一种结合Web技术与原生能力的跨平台应用开发模式,其核心在于解决WebView与原生代码的高效协同问题。其基本原理是通过构建一个通信桥接层,实现JavaScript与原生语言(Java/Kotlin、Objective-C/Swift)之间的双向通信。这种架构的技术价值在于,既能利用Web技术实现UI的快速迭代与动态更新,又能深度调用摄像头、文件系统等原生设备能力,从而在开发效率与用户体验间取得平衡。典型的应用场景包括需要快速上线、频繁更新业务逻辑的电商、内容类应用,以及对原生性能有特定要求的工具

Coding 469

NSDictionary 判断空

字典里某个键key的值可能是空数组~~~那这个[dic objectForkey:key]是什么? 你猜会是[NSNull null]? 也可能不是~~~但至少是个空数组。 [[dic objectForkey:key] count]会告诉我们结果。 下面的代码使用了NSNull来判断字典某个键的值是否为空。但是这种判断方法,似乎对于空集合类不大奏效。

a19860903的专栏 3万+

如何删除NSDictionary或NSArray中的NSNull

前段时间与某公司的技术交流,被问到一个问题,如何删除NSDictionary中的NSNull。当时在纸上写,以前太依赖Xcode编译器了,以至于方法名都写不全,最终也没写出来,我想我肯定被鄙视的体无完肤。 最近有机会实现了一下。先来递归实现方案: // 删除NSArray中的NSNull - (NSMutableArray *)removeNullF...

weixin_30776273的博客 238

解决NSArray和NSDictionary中含有null时 writeToFile 失败的问题

解决NSArray和NSDictionary中含有null时  writeToFile 失败的问题 @implementation NSArray(Plist) -(BOOL)writeToPlistFile:(NSString*)filename{ NSData * data = [NSKeyedArchiver archivedDataWithRootObject:self];

我爱大馅饼 6744

iOS去除网络请求到的数据的null值

请求接口获取到的数据包涵null值,处理的时候遇到了问题。 在网上搜到了几种解决办法,自己尝试了两种都可以达到目的,在这里记录一下。 第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下: .h文件代码:#import @interface NSDictionary (DeleteNull) +(id)changeType:(id)myObj;

bigliang 1万+
上一篇: Reactive Cocoa Tutorial
下一篇: Google Objective-C Style Guide 中文版
ios_developer
博客等级 码龄14年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值