中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS @interface和@property聲明變量研究

發布時間:2020-07-20 06:37:27 來源:網絡 閱讀:749 作者:dorisFire 欄目:移動開發

        在聲明一個變量的時候,經常有使用下面的三種形式:        

        @interface testView : UIView

        {

            //1、內部變量,外部不能訪問

            UIButton *button1;

            //3、聲明變量,同時聲明了一個同名變量屬性

            UIButton *button3;

        }

        

        //2、聲明一個屬性,從Xcode4.5開始,使用@property關鍵字將自動生成settergetter方法,不用@synthesize關鍵字

        @property (nonatomic, strong) UIButton *button2;

        //

        @property (nonatomic, strong) UIButton *button3;

        

        @end

        第一種方式聲明的變量是一個內部變量,只能在該類中被訪問,在類的外部是不能訪問的。因此,這樣的變量最好不要在.h文件中去聲明,應該放在.m文件中

        第二種方式聲明了一個屬性,從Xcode 4.5以后,不用使用@synthesize關鍵字就自動生成了該屬性的setter和getter方法。

        第三種方法是在聲明一個變量的時候,同時聲明了一個與變量同名的屬性。這時候,如果不使用@synthesize關鍵字,會產生一個警告信息。

        這種情況讓我很迷惑,通過寫了一個簡單的demo測試了一番,現在將我的分析結果總結一下。

        先上代碼:

        @synthesize button3 = _button3;

        

        - (id)initWithFrame:(CGRect)frame

        {

            self = [super initWithFrame:frame];

            if (self) {

                // Initialization code

                

                //button1

                button1 = [[UIButton alloc] initWithFrame:CGRectMake(20, 10, 75, 44)];

                button1.backgroundColor = [UIColor redColor];

                [button1 setTitle:@"button1" forState:UIControlStateNormal];

                [self addSubview:button1];

                

                //button2

                _button2 = [[UIButton alloc] initWithFrame:CGRectMake(20, 64, 75, 44)];

                _button2.backgroundColor = [UIColor greenColor];

                [_button2 setTitle:@"button2" forState:UIControlStateNormal];

                [self addSubview:_button2];

                

                //button3

                button3 = [[UIButton alloc] initWithFrame:CGRectMake(20, 118, 75, 44)];

                button3.backgroundColor = [UIColor blueColor];

                [button3 setTitle:@"button3" forState:UIControlStateNormal];

                [self addSubview:button3];

                _button3.backgroundColor = [UIColor grayColor];

                [_button3 setTitle:@"button3_1" forState:UIControlStateNormal];

                

                _button3 = [[UIButton alloc] initWithFrame:CGRectMake(20, 172, 75, 44)];

                _button3.backgroundColor = [UIColor grayColor];

                [_button3 setTitle:@"button3_1" forState:UIControlStateNormal];

                [self addSubview:_button3];

            }

            return self;

        }

        通過@synthesize關鍵字我先把警告信息屏蔽掉了,button1是一個供內部訪問的變量,button2是可供外部訪問的,這都沒什么,重點是button3。

        通過代碼可以發現,我分別對button3和_button3進行了初始化,并設置了button的title和背景顏色。在對button3初始化完成后,我希望能通過_button3去修改button3的背景顏色和title。實際運行效果如下圖:

iOS @interface和@property聲明變量研究

        _button3對button3的修改無效!為什么這樣?我的理解是button3是供內部訪問的變量,_button3是一個可供外部訪問的屬性,即使我通過@synthesize button3 = _button3進行設置,也是對@property (nonatomic, strong) UIButton *button的設置。因此我得出結論:button3和_button3是完全獨立的,第三種聲明方式是無意義的

        接著測試,我在另外一個文件中引入我的測試文件,并實例化了一個對象希望對button們進行訪問,上代碼:

        - (void)viewDidLoad

        {

            [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

            

            testView *view = [[testView alloc] initWithFrame:CGRectMake(10, 50, 300, 250)];

            [view.button2 setTitle:@"按鈕2" forState:UIControlStateNormal];

            [view.button3 setTitle:@"按鈕3" forState:UIControlStateNormal];

            [self.view addSubview:view];

        }

        運行效果如圖:

iOS @interface和@property聲明變量研究

        通過測試分析最終得出的結論如下:

        1、聲明一個內部使用變量,在.m文件中聲明即可。(使用@interface { }或@property均可)。

        2、聲明一個可供外部訪問的屬性,在.h文件中使用@property即可。

        


        PS:第一次原創寫blog,才發現寫東西這么難啊!

        理解不一定對,希望大家輕噴,多指點!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开阳县| 奉新县| 牡丹江市| 丰镇市| 邛崃市| 徐州市| 原平市| 吉首市| 泰宁县| 错那县| 寻乌县| 乐业县| 弥勒县| 长海县| 宜阳县| 中山市| 手机| 唐海县| 巴林左旗| 正镶白旗| 盘锦市| 苏尼特右旗| 娄底市| 田林县| 恩施市| 茌平县| 铁力市| 海晏县| 潮安县| 双辽市| 大同市| 永寿县| 扎赉特旗| 景宁| 津市市| 化德县| 长葛市| 潞西市| 赣榆县| 安乡县| 兴安县|