解决NSLog问题

NSLog的强大之处在于,它能在代码运行过程中显示变量值以及程序实际走向,能帮助我们发现大量错误和潜在风险。我们希望尽可能多的用到NSLog,希望它能无处不在,但是即便设定编译配置为 Release,NSLog() 的代码也会被编译到最终文件中(system console) ,可以在.app文件中被查看,这显然不是一个好消息。

它的运行会占用时间和设备资源。当我们用Simulator运行一个大型程序时,NSLog的资源占用并不引人注意,风险也不会显示出来。但到了真机上,会发现很“卡”,FPS也降到了各位数。

复制下面代码,并添加在应用程序中的*Prefix.pch文件内;

//release模式通常会定义 __OPTIMIZE__,当然debug模式不会。

#ifndef __OPTIMIZE__

   #define NSLog(...) NSLog(__VA_ARGS__)

#else

   #define NSLog(...) {}

#endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
零钱找零问题是一个经典的动态规划问题,也可以使用贪心算法来解决。下面给出两种解法的代码实现。 1. 动态规划解法: ```objc #import <Foundation/Foundation.h> NSInteger minCoins(NSArray<NSNumber *> *coins, NSInteger amount) { NSMutableArray<NSNumber *> *dp = [NSMutableArray arrayWithCapacity:amount + 1]; for (NSInteger i = 0; i <= amount; i++) { dp[i] = @(amount + 1); } dp[0] = @0; for (NSInteger i = 1; i <= amount; i++) { for (NSNumber *coin in coins) { if (i >= coin.integerValue) { dp[i] = @(MIN(dp[i].integerValue, dp[i - coin.integerValue].integerValue + 1)); } } } return dp[amount].integerValue > amount ? -1 : dp[amount].integerValue; } int main(int argc, const char * argv[]) { @autoreleasepool { NSArray<NSNumber *> *coins = @[@1, @2, @5]; NSInteger amount = 11; NSInteger result = minCoins(coins, amount); NSLog(@"The fewest number of coins needed to make change for %ld is: %ld", amount, result); } return 0; } ``` 在上述代码中,我们定义了一个名为 `minCoins` 的函数来计算零钱找零问题的最少硬币数量。使用动态规划的思想,我们创建了一个数组 `dp`,其中 `dp[i]` 表示凑够金额 `i` 的最少硬币数量。通过迭代计算每个金额的最少硬币数量,最终得到凑够金额 `amount` 的最少硬币数量。 在 `main` 函数中,我们设定了硬币面额数组 `coins` 为 `[1, 2, 5]`,目标金额 `amount` 为 `11`,并调用 `minCoins` 函数来计算最少硬币数量。最后,使用 `NSLog` 打印出结果。 编译运行上述代码,将会输出:The fewest number of coins needed to make change for 11 is: 3,表示凑够金额 `11` 需要的最少硬币数量为 `3`。 2. 贪心算法解法: ```objc #import <Foundation/Foundation.h> NSInteger minCoins(NSArray<NSNumber *> *coins, NSInteger amount) { NSInteger count = 0; for (NSInteger i = coins.count - 1; i >= 0 && amount > 0; i--) { if (coins[i].integerValue <= amount) { NSInteger num = amount / coins[i].integerValue; count += num; amount -= num * coins[i].integerValue; } } return amount == 0 ? count : -1; } int main(int argc, const char * argv[]) { @autoreleasepool { NSArray<NSNumber *> *coins = @[@1, @2, @5]; NSInteger amount = 11; NSInteger result = minCoins(coins, amount); NSLog(@"The fewest number of coins needed to make change for %ld is: %ld", amount, result); } return 0; } ``` 在上述代码中,我们同样定义了一个名为 `minCoins` 的函数来计算零钱找零问题的最少硬币数量。使用贪心算法的思想,我们从最大面额的硬币开始,尽可能多地使用该面额的硬币,然后逐步减小面额直到凑够目标金额。 在 `main` 函数中,我们同样设定了硬币面额数组 `coins` 为 `[1, 2, 5]`,目标金额 `amount` 为 `11`,并调用 `minCoins` 函数来计算最少硬币数量。最后,使用 `NSLog` 打印出结果。 编译运行上述代码,将会输出:The fewest number of coins needed to make change for 11 is: 3,表示凑够金额 `11` 需要的最少硬币数量为 `3`。 希望以上示例代码对你有所帮助。如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值