代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

调用@property accessor?

  •  0
  • fuzzygoat  · 技术社区  · 15 年前

    我想知道是否有人能解释一下,这两个都是一样的?正如两个调用“setSeparatorColor”一样,我猜他们都在为属性调用访问器。

    [myTableView setSeparatorColor:[UIColor orangeColor]];
    

    .

    [[self myTableView] setSeparatorColor:[UIColor orangeColor]];
    

    加里。

    2 回复  |  直到 15 年前
        1
  •  -1
  •   Liam    15 年前

    对,他们都在做同样的事

    [myTableView setSeparatorColor:[UIColor orangeColor]];
    

    直接访问变量,其中as

    [[self myTableView] setSeparatorColor:[UIColor orangeColor]];
    

    正在调用属性的访问器,然后发送 setSeparatorColor 给它的信息

        2
  •  3
  •   kpower    15 年前

    不完全一样。

    在第一个版本中,您使用某个类的实例变量- myTableView .

    在第二个版本中,您使用由相同命名方法返回的值。关于第一步当前类的方法 - (..)myTableView; 此方法返回一些值。在下一步-你用 - (..)setSeparatorColor:.. 返回对象的方法。当然,经常(当你使用 @synthesize myTableView; 或方法实现 - (..)myTableView { return myTableView; } )它与第一个版本中的变量相同,但它不是强制条件(取决于您的实现)。此外, -(..)我的表视图; 可能有一些副作用/做一些额外的工作-不仅仅是返回一个值。

    示例(MyTableView和[Self MyTableView]可能不同,具体取决于某些条件):

    // myClass.h
    @interface myClass : UIViewController {
        UITableView *myTableView;
    }
    @property (nonatomic, retain) UITableView *myTableView;
    @end;
    
    // myClass.m
    #import "myClass.h"
    
    @implementation myClass
    
    @dynamic myTableView;
    
    - (UITableView *)myTableView {
        return (someConditionIsTrue) ? myTableView : nil;
    }
    
    - (void)setMyTableView:(UITableView *)value {
        if (myTableView != value) {
            [myTableView release];
            myTableView = [value retain];
        }
    }
    
    @end;