首先看下别人写的一个例子:
//
// XLCycleScrollView.h
// CycleScrollViewDemo
//
// Created by xie liang on 9/14/12.
// Copyright (c) 2012 xie liang. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol XLCycleScrollViewDelegate;
@protocol XLCycleScrollViewDatasource;
@interface XLCycleScrollView : UIView<UIScrollViewDelegate>
{
UIScrollView *_scrollView;
UIPageControl *_pageControl;
id<XLCycleScrollViewDelegate> _delegate;
id<XLCycleScrollViewDatasource> _datasource;
NSInteger _totalPages;
NSInteger _curPage;
NSMutableArray *_curViews;
}
@property (nonatomic,readonly) UIScrollView *scrollView;
@property (nonatomic,readonly) UIPageControl *pageControl;
@property (nonatomic,assign) NSInteger currentPage;
@property (nonatomic,assign,setter = setDataource:) id<XLCycleScrollViewDatasource> datasource;
@property (nonatomic,assign,setter = setDelegate:) id<XLCycleScrollViewDelegate> delegate;
- (void)reloadData;
- (void)setViewContent:(UIView *)view atIndex:(NSInteger)index;
@end
@protocol XLCycleScrollViewDelegate <NSObject>
@optional
- (void)didClickPage:(XLCycleScrollView *)csView atIndex:(NSInteger)index;
@end
@protocol XLCycleScrollViewDatasource <NSObject>
@required
- (NSInteger)numberOfPages;
- (UIView *)pageAtIndex:(NSInteger)index;
@end
再看一篇参考博文:
我们知道 如果
@property (retain,nonatomic) NSArray *myArray;
它已经为我们添加了
setMyArray 和getMyArray
我们不必再写这些函数,这样为我们提供了很大的方便,比如说,我们要用很多属性,我们不可能写很多
setter 和getter吧?比如说1000个,这样很不现实。
但是我们也可以使用自己的setter 和getter,怎么说呢?
默认情况下,我们 aa.bb=cc 调用的是 aa的 -setBb:
有时候我们想在setBb中处理一些事情,我们可能需要有自己的setBb
@interface MyViewController : UIViewController
{
NSArray *_arrayTest;
NSArray *myArray;
}
@property (retain,nonatomic,setter = setMyNewArray:) NSArray *arrayTest;
@property (retain,nonatomic) NSArray *myArray;
-(void) setMyNewArray:(NSArray *)ary;
@end
@implementation MyViewController
@synthesize arrayTest=_arrayTest;
@synthesize myArray;
-(void)setArrayTest:(NSArray *)arrayTest
{
//如果我们写了setArrayTest,setter就会调用我们写的setArrayTest,
如果你把下面的注释掉,你试一试 xx.arrayTest=xxx ,你会发现retainCount和没注释前是有变化的
//NSLog(@"set array");
/*
if (![_arrayTest isEqualToArray:arrayTest]) {
[_arrayTest release];
[arrayTest retain];
_arrayTest =arrayTest;
}
*/
}
-(void) setMyNewArray:(NSArray *)ary
{
NSLog(@" set new array");
//处理一些事情
if (![_arrayTest isEqualToArray:ary])
{
[_arrayTest release];
[ary retain];
_arrayTest =ary;
}
}
@end