IPHONE开发 @synthesize 变量下划线
2013-11-19 11:10
337 查看
//AppDelegate.h @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong) NSMutableArray *myArray; @end
//AppDelegate.m
@implementation AppDelegate
@synthesize window = _window;
@synthesize myArray = _myArray;
@synthesize的作用是为属性window和myArray生成存取方法,即setWindow/getWindow和setMyArray/getMyArray
该属性存取方法中进行下划线赋值(window = _window)是何意?
作用:防止类的成员变量_window和_window设置方法setWindow的函数参数产生冲突,比如重写该set方法时:
@synthesize window ; //如果不写 = _window
-(void) setwindow:(UIWindow)window // OC 会自动填充完成setter语句
{
window = window //??造成混乱,方法里面用的究竟是参数的ivar还是类里面的ivar
}则会产生编译错误: Synthesized property 'xX' must either be named the same as a compatible ivar or must explicitly name an ivar
正确的方法是:
方法一:把参数的ivar名字改成和类里面的ivar不同的名字
@synthesize window;
-(void) setWindow:(UIWindow *)myWindow// 改成不一样的名字
{
window = mywindow //类变量赋值为参数变量
}
方法二:@synthesize happiness = _happiness
@synthesize window = _window
-(void) setWindow:(UIWindow *)window// 不冲突了
{
_window = window; //类变量名赋值为参数变量值
}
为什么有些变量属性定义的时候,不需要加下划线?比如:
//ViewController.h
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
//ViewController.m
@implementation ViewController
@synthesize scrollView;
@synthesize pageControl;
定义的控件属性不会有变量给其赋值,因此不需要有下划线
【参考】
1. http://www.cocoachina.com/bbs/read.php?tid=98617
2. http://moto0421.iteye.com/blog/1577459
3. http://blog.csdn.net/qq515383106/article/details/8508611
相关文章推荐
- iphone开发教程
- Ipad开发课程系列目录--很好的教程,推荐给大家
- 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习
- Objective-C语法的那些事儿(十篇文章,大家一起来学习)
- 分享15本iphone开发书籍,需要的来下载
- ASIHTTPRequest ASIWebThumbnail
- iphone开发 加速计
- ios 仿facebook 滑动导航菜单实现
- Ios 仿ibooks 翻页效果
- IPHONE开发 VIEW之间的相互切换
- IPHONE开发 文本框回车 虚拟键盘消失
- IPHONE开发 在VIEW之间传递参数
- Xcode4.5运行IOS6以前版本测试
- IOS开发常用代码汇总1
- IOS开发常用代码汇总2
- IOS开发常用代码汇总3
- IOS开发常用代码汇总4
- IOS开发常用代码汇总5
- iOS Block学习
- 【转】iOS开发---开源项目和开源类库篇