ios中手動加入getset方法


such as:

1
2
3
4
5
6
7
8
9
10
11
#import <Cocoa/Cocoa.h>
 
@interface Photo : NSObject {
    NSString* caption;
    NSString* photographer;
}
 
- (NSString*) caption;
- (NSString*) photographer;
 
@end

現在添加setter:

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <Cocoa/Cocoa.h>
 
@interface Photo : NSObject {
    NSString* caption;
    NSString* photographer;
}
- (NSString*) caption;
- (NSString*) photographer;
 
- (void) setCaption: (NSString*)input;
- (void) setPhotographer: (NSString*)input;
 
@end

Setter不需要返回值,所以設置為void。
6. 類實現

從getter開始創建實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
#import "Photo.h"
 
@implementation Photo
 
- (NSString*) caption {
    return caption;
}
 
- (NSString*) photographer {
    return photographer;
}
 
@end

這部分的代碼由@implementation和類名開始,並且像接口一樣有@end。所有的方法必須放在這兩個聲明之間。

如果之前做過編碼,getter看起來應該非常熟悉,所以將精力放在setter上,這需要一些解釋:

1
2
3
4
5
6
7
8
9
10
11
- (void) setCaption: (NSString*)input
{
    ;
    caption = [input retain];
}
 
- (void) setPhotographer: (NSString*)input
{
    [photographer autorelease];
    photographer = [input retain];
}

每個setter有兩個變量。第一個是已有對象的引用,第二個是新輸入的對象。在垃圾回收環境中,可以直接設置新值:

1
2
3
- (void) setCaption: (NSString*)input {
    caption = input;
}

但是如果不能使用垃圾回收,就需要釋放(release)舊對象,並保持(retain)新對象。

實際上有兩種方式釋放對象的引用:釋放(release)和自動釋放(autorelease)。標准的釋放將會立即移除引用。自動釋放方法將會在一小會后釋放,但可以明確的是它會保留到當前函數結束(除非添加自定義的代碼明示改變這個規則)。

自動釋放方法在setter中更加安全一些,因為變量的新舊值會指向相同的對象。肯定不想立刻釋放需要保持的對象。

現在似乎有一些混亂,但是將會按照進度有一個整體的介紹。現在無需弄清楚所有內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM