zoukankan      html  css  js  c++  java
  • Effective Objective-C 2.0 Reading Notes

    1. Literal Syntax

    NSString *someString = @"Effective Objective-C 2.0";

    NSNumber *someNumber = [NSNumber numberWithInt:1];

    <=>

    NSNumber *someNumber = @1;

    // syntax also works for expressions

    int x = 5;
    float y = 6.32f;
    NSNumber *expressionNumber = @(x * y);

    NSArray *animals =
    [NSArray arrayWithObjects:@"cat", @"dog",
    @"mouse", @"badger", nil];

    <=>

    NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];

    NSString *dog = [animals objectAtIndex:1];

    <=>

    NSString *dog = animals[1];

    However, you need to be aware of one thing when creating arrays using the literal
    syntax. If any of the objects is nil, an exception is thrown

    a scenario:

    id object1 = /* ... */;
    id object2 = /* ... */;
    id object3 = /* ... */;


    NSArray *arrayA = [NSArray arrayWithObjects:
    object1, object2, object3, nil];


    NSArray *arrayB = @[object1, object2, object3];

    Now consider the scenario in which object1 and object3 point to valid Objective-C
    objects, but object2 is nil. The literal array, arrayB, will cause the exception to be thrown.
    However, arrayA will still be created but will contain only object1. The reason is that the
    arrayWithObjects: method looks through the variadic arguments until it hits nil, which is
    sooner than expected.

    It’s much better that an exception is thrown, causing a probable application crash, rather than creating an array
    having fewer than the expected number of objects in it.

    // Literal Dictionaries

    NSDictionary *personData =
    [NSDictionary dictionaryWithObjectsAndKeys:
    @"Matt", @"firstName", @"Galloway", @"lastName",
    [NSNumber numberWithInt:28], @"age", nil];

    <=>

    NSDictionary *personData =
    @{@"firstName" : @"Matt",
    @"lastName" : @"Galloway",
    @"age" : @28};

    NSString *lastName = [personData objectForKey:@"lastName"];

    <=>

    NSString *lastName = personData[@"lastName"];

  • 相关阅读:
    stop slave卡住
    ERROR 1193 (HY000): Unknown system variable ‘rpl_semi_sync_master_enabled‘
    sqlalchemy QueuePool limit of size 3 overflow 20 reached, connection timed out, timeout
    Orchestrator 集群扩容后新节点无法加入集群
    关于golang database_sql 包
    MySQL主从集群搭建实战
    数据库分库分表事务解决方案
    如何编写单元测试-基于Spring
    扩展Spring切面
    springboot自定义配置源
  • 原文地址:https://www.cnblogs.com/davidgu/p/3731526.html
Copyright © 2011-2022 走看看