替换NSString类中的stringWithFormat:方法

替换NSString类中的stringWithFormat:方法

先给出源码:

YXUseful.h

//
//  YXUseful.h
//  NSString
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <Foundation/Foundation.h>

NSString * String(NSString *format, ...);

YXUseful.m

//
//  YXUseful.m
//  NSString
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "YXUseful.h"

NSString * String(NSString *format, ...)
{
    va_list ap;
    va_start (ap, format);

    NSString *body = [[NSString alloc] initWithFormat:format arguments:ap];

    va_end (ap);

    return body;
}

使用情况:

从上图就能看出,String明显要比下面的方式简单了不少,对吧:)

从实现的角度上来看,是下面的方式(你绝对没有见过可以带多个参数的这种呢)

"..." 这个不定参数列表也许你是第一次见到:)

当然也有弊端:

 

总结:

其实,实现起来并不容易,如果从来没有接触过,是绝对写不出来的,因为,你永远也不会知道需要va_start,va_end才能够正常使用:)

时间: 2024-08-04 03:45:20

替换NSString类中的stringWithFormat:方法的相关文章

在派生类中对虚方法进行重载

先让我们回顾一下普通的方法重载.普通的方法重载指的是:类中两个以上的方法(包括隐藏的继承而来的方法),取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法. 而对基类虚方法的重载是函数重载的另一种特殊形式.在派生类中重新定义此虚函数时,要求的是方法名称.返回值类型.参数表中的参数个数.类型.顺序都必须与基类中的虚函数完全一致.在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static或virtual修饰符. 还是让我

java-Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了!

问题描述 Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! 麻烦大家了 解决方案 直接作为参数传就是了 void f1() { int[] x = {1,2,3,4,5}; f2(x[1]); } void f2(int n) { } 解决方案二: Spring AOP代理机制以及方法调用在同一个类的另一个方法的问题 解决方案三: 可以使用全局变量的方

java static-假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗

问题描述 假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗 假设下面这种情况,test1中的do方法会被初始化吗? public class test{ public static void main(string []args){ test1 t: } } class test1{ int i: static void do(){} } 解决方案 第一次访问的含义是,访问了这个静态类中的任何方法.属性.字段,那么所有的属性都会被初始化. 解决方案二: 方法

调用方法-怎么用一个对象调用另一个类中对象的方法

问题描述 怎么用一个对象调用另一个类中对象的方法 怎么用一个对象调用另一个类中对象的方法 比如一个类A ,一个类B,B里面有个方法show(),在main中A a=new A();B b=new B();在A中没有调用B方法的情况下,我想通过a调用B中的show()方法,该怎么实现.初学者,求大神给我指导下,不知道我表达的是否准确 解决方案 首先,确认下你是想在A类的某个方法中调用B类的方法吗?如果是的话,A必须依赖B,依赖方法可以是A类关联一个B类的成员变量,示例代码: public clas

javaweb-测试类中能调用方法,action中却不可以

问题描述 测试类中能调用方法,action中却不可以 用findByproperty做查询,在测试类中能调用该方法,但是在action中却不能调用 但是findById是可以用的,完全不知道是什么问题 解决方案 看下报什么错误呢?是不是方法没找到

jsp-怎么样把action中同一个类中不同的方法数据,有区分的显示在JSP页面中

问题描述 怎么样把action中同一个类中不同的方法数据,有区分的显示在JSP页面中 action中代码: Article articleNext=articleService.getNext(article); Article articlePrev=articleService.getPrev(article); getActionContext().put("nextArticle", articleNext); getActionContext().put("prev

《Python面向对象编程指南》——1.3 在基类中实现init()方法

1.3 在基类中实现init()方法 通过实现__init()__方法来初始化一个对象.每当创建一个对象,Python会先创建一个空对象,然后调用该对象的__init()__函数.这个方法提供了对象内部变量以及其他一些一次性过程的初始化操作. 以下是关于一个Card类层次结构定义的一些例子.这里定义了一个基类和3个子类来描述Card类的基本信息.有两个变量是参数直接赋值的,另外两个参数是通过初始化方法计算来完成初始化的. class Card: def __init__( self, rank,

java源码-DataOutputStream类中的close方法

问题描述 DataOutputStream类中的close方法 各位好,今天试用了一下,DataOutputStream类,当我使用后关闭DataOutputStream对象的时候,构造时传入的FileOutputStream流也被关闭了.文档里也是这么写的,但是我去查看源码时只发现了在FilterOutputStream类中的这么一小段: public void close() throws IOException { try (OutputStream ostream = out) { fl

PHP类中的魔术方法(Magic Method)简明总结_php实例

1. __construct()和__destruct() 在实例被 创建/销毁 的时候被调用,都可以传递0个或多个参数. class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj); Note:The destructor method will be called as soon as