How to write my own setter for an ivar, i.e.: self.ivar = …?

前端 未结 2 951
抹茶落季
抹茶落季 2021-01-06 19:04

This is a follow-up question of: Difference between self.ivar and ivar? :

self.name = @\"hello\";

I would like to know what is done inside

2条回答
  •  星月不相逢
    2021-01-06 19:56

    Without a property declaration (that is, you have manually declared the setter and getter methods), you'd typically implement them like this:

    @interface MyClass : NSObject
    {
        NSString *name;
    }
    - (NSString *) name;
    - (void) setName:(NSString *) name;
    @end
    
    @implementation MyClass
    
    - (void) dealloc
    {
        [name release];
        [super dealloc];
    }
    
    - (NSString *) name
    {
        return name;
    }
    
    - (void) setName:(NSString *) aName
    {
        if (aName != name)
        {
            [name release];
            name = [aName retain];
        }
    }
    
    @end
    

    Atomic setters could look something like this:

    - (void) setName:(NSString *) aName
    {
        @synchronized(self)
        {
            if (aName != name)
            {
                [name release];
                name = [aName retain];
            }
        }
    }
    

提交回复
热议问题