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"];

  • 相关阅读:
    概述各种事务隔离级别发生的影响
    linux内核的经典书籍
    sso 登录,网页跳转的实现方式
    初探移动网站的架构和设计
    C# PrintDocument 打印
    .Text分页技术(1)分页的存储过程分析
    SQL2008使用CTE递归查询批量插入500万数据
    自己写的Web服务器
    OMCS 语音视频框架
    ESFramework4.x
  • 原文地址:https://www.cnblogs.com/davidgu/p/3731526.html
Copyright © 2011-2022 走看看