mikeash.com: thisو ھي ماڻھو ، توھان کي خبر آھي؟

Original Source : مائڪ ايش(Michael Ash)

جمعه سوال ۽ جواب 2015-01-23: اچو سوئفٽ نوٽيفڪيشن Build پاران

NSNotificationCenterھڪڙو مفيد API آھي جيڪو ايپل جي فريم ورڪ ۾ وسيع آھي ، ۽ اڪثر ڏسي ٿو گھڻو استعمال اسان جي پنھنجي ڪوڊ ۾. مون ا previouslyي دريافت ڪئي عمارتNSNotificationCenter Objective-C ۾. ا Today ، مان ان کي سوئفٽ ۾ toاھڻ چاھيان ٿو ، پر ر notو انھيءَ سا .ئي خيال جي anotherي ور نه. ان جي بدران ، مان و takeي رھيو آھيان API ۽ و makeيڪ تيز ، بھتر ، مضبوط ، ۽ فائدو و takeو تمام س stuffي شين جو سوئفٽ کي جيڪو اسان کي پيش ڪرڻو آھي.

NSNotifications
NSNotifications simpleئي سادا ۽ طاقتور آھن ، اھو ئي سبب آھي جو اھي ظاھر ٿين ٿا اڪثر فريم ورڪ ۾. خاص طور تي ، انھن وٽ آھن ڪجھ ال distinct فائدا:

  1. نوٽيفڪيشن موڪليندڙن ۽ وصول ڪندڙن جي وچ ۾ ڪتاڻ.
  2. ھڪڙي اطلاع لاءِ گھڻن وصول ڪندڙن جي مدد.
  3. userInfoملڪيت استعمال ڪندي نوٽيفڪيشن تي ڪسٽم ڊيٽا لاءِ سپورٽ .

اتي ڪجھ نقصان پڻ آھن:

  1. موڪلڻ ۽ نوٽيفڪيشن لاءِ رجسٽريشن شامل آھي ھڪڙي سنگلٽن مثال سان رابطو ڪرڻ سان توھان جي ڪلاسن سان ڪو واضح تعلق.
  2. اھو ھميشه واضح ناھي ته ڪھڙا نوٽيفڪيشن موجود آھن ڪنھن خاص طبقي لاءِ.
  3. اطلاعن لاءِ جيڪي استعمال ڪن ٿا userInfo، اھو ھميشه واضح ناھي ته ڪھاڻيون موجود آھن لغت ۾.
  4. userInfo ڪيز متحرڪ طور تي ٽائپ ٿيل آھن ۽ موڪليندڙ ۽ وصول ڪندڙ جي وچ ۾ تعاون جي ضرورت آھي جيڪا expressedوليءَ ۾ ظاھر نٿي ڪري سگھجي ، ۽ گندي باڪسنگ/غير باڪسنگ قسم غير اعتراض جي قسمن لاءِ.
  5. هڪ نوٽيفڪيشن رجسٽريشن کي هٽائڻ جي ضرورت آهي هڪ واضح هٽائڻ واري ڪال جي.
  6. اھو مشڪل آھي انسپيڪٽ ڪرڻ لاءِ ته ڪنھن شيءِ کي رجسٽرڊ ڪيو ويو آھي ڪنھن به ڏنل نوٽيفڪيشن لاءِ ، جيڪو ڪري سگھي ٿو سخت ڊيبگ ڪرڻ.

منهنجو مقصد سوئفٽ ۾ اطلاعن جي يهر تخليق ڪرڻ آھي انھن مسئلن کي حل ڪرڻ لاءِ.

API خاڪو API
جو عوامي چهرو ھڪڙو طبقو سڏيو وي ٿو ObserverSet. ھڪڙو ObserverSetمثال رکندو آھي مبصرن جو ھڪڙو سيٽ جيڪو خاص خاص نوٽيفڪيشن ۾ دلچسپي رکي ٿو ڪنھن خاص شيءِ پاران موڪليو ويو. بلڪه بيان ڪرڻ جي بجاءِ تار جي قسطن ۽ ثالثي جي ھڪڙي سنگلٽن ذريعي ، نوٽيفڪيشن جو وجود صرف ھڪڙي طبقي جي عوامي ملڪيت آھي:

    ڪلاس  ExampleNotificationSender  { 
        public  let  exampleObservers  =  ObserverSet < Void > ()

هن Voidڊيٽا ته نوٽيفڪيشن سان گڏ موڪليو سنڌ جو قسم آهي. Voidظاھر ڪري ٿو ھڪڙي خالص اطلاع بغير اضافي ڊيٽا جي. ڊيٽا موڪلڻ ايترو سادو آھي جيترو قسم مهيا ڪرڻ:

        public  let  newURLObservers  =  ObserverSet < NSURL > ()

ھي ھڪڙو نوٽيفڪيشن آھي جيڪو مهيا ڪري ٿو س NSURLallني مبصرن کي ھر وقت موڪلڻ وقت.

ڊيٽا جا گھڻا ٽڪرا ڪو مسئلو ناھن tuples جي جادوءَ سان:

        public  let  newItemObservers  =  ObserverSet < ( String ،  Int ) > ()

هي هر مبصر کي مهيا ڪري ٿو نالو ۽ انڊيڪس هڪ نئين شيءِ جو. جيڪڏھن توھان چاھيو ٿا اھو و moreيڪ واضح ڪرڻ لاءِ ، توھان ڏئي سگھوٿا پڻ پيرا ميٽرز جا نالا:

        public  let  newItemObservers  =  ObserverSet < ( نالو :  String ،  index :  Int ) > ()

هڪ مبصر کي رجسٽر ڪرڻ لاءِ ، ڪال بيڪ شامل ڪريو مبصر سيٽ تي:

    اعتراض . مثال مبصر . شامل ڪريو {  println ( "Got an example notification " )  } 
    اعتراض . newURLObservers . شامل ڪريو {  println ( "نئون URL مليو: \ ($ 0)" )  }

هن addجو طريقو هڪ ٽوڪن ته مبصر کي ختم ڪرڻ لاء استعمال ڪري سگهجي ٿو موٽي:

    let  token  =  اعتراض . newItemObservers . شامل ڪريو {  println ( "ھڪڙي نئين شيءِ ملي آھي named ($ 0) نالي انڊيڪس \ ($ 1)" )  } ۾ 
    ... 
    اعتراض . newItemObservers . ختم ڪريو ( نشان )

نوٽيفڪيشن لاءِ ھڪڙو عام ڪيس اھو آھي ته انھن کي حاصل ڪيو و aي ھڪڙي طريقي سان ، ۽ نوٽيفڪيشن کي رد ڪريو جڏھن مثال ڊيل ٿيل آھي. اھو پورو ڪرڻ آسان آھي ھڪڙي قسم جو addطريقو استعمال ڪندي :

    اعتراض . newItemObservers . add ( self ،  self . dynamicType . gotNewItem ) 

    func  gotNewItem ( name :  String ،  index :  Int )  { 
        println ( "Got a new item: \ (name) \ (index)" ) 
    }

هن self.dynamicTypeنحو سا verbose ۽ redundant آهي، پر tolerable. مبصر سيٽ ھڪڙو ڪمزور حوالو رکندو self۽ خود بخود مبصر کي ڪ removeي whenڏيندو gotNewItemجڏھن مثال ختم ڪيو ويندو ، ۽ سا meantimeئي وقت ۾ ان کي دعوت ڏيندو جڏھن اھو نوٽيفڪيشن موڪليندو.

نوٽيفڪيشن موڪلڻ ۾ شامل آھي فون ڪرڻ notify۽ پاس ڪرڻ مناسب پيرا ميٽرز:

    مثال مبصر . notify () 
    newURLObservers . مطلع ڪريو ( newURL ) 
    newItemObservers . اطلاع ڏيو ( نالو :  newItemName ،  index :  newItemIndex )

اھو reallyاھي ٿو واقعي واقعي س niceي API لاءِ. مٿي listedاڻايل نقصانن مان گذرڻ:

  1. ڪوبه سنگلٽن ملوث ناهي. هر (object, notification)جوڙو نمائندگي ڪئي وئي آهي هڪ ال separate مبصر سيٽ مثال سان.
  2. س notئي نوٽيفڪيشن دستياب آهن هڪ طبقي لاءِ عوامي ملڪيت آهن ان طبقي جي.
  3. واضح پيرا ميٽر استعمال ڪيا ون ٿا ڊيٽا کي مبصرن ڏانهن منتقل ڪرڻ لاءِ. انھن کي ڪوڊ ۾ نالو ڏئي سگھجي ٿو ته جيئن اھو واضح ڪري سگھي ته اھي areا آھن.
  4. نوٽيفڪيشن پيرا ميٽرز مستحڪم طور ٽائپ ٿيل آھن. قسم بيان ڪيا ويا آھن مبصر سيٽ پراپرٽي ۾ ۽ نوٽيفڪيشن موڪليندڙ ۽ وصول ڪندڙ چيڪ ڪيا ويا آھن مرتب ڪندڙ طرفان. س typesئي قسم سپورٽ ٿيل آھن ، باڪسنگ جي ضرورت کان سواءِ.
  5. عام صورت لاءِ جتي ھڪ مبصر ھٽايو و deي جڏھن الall ڪيو و ،ي ، ھٽائڻ خودڪار ٿي سگھي ٿو.
  6. هر مبصر سيٽ رکندو آهي داخلا جي هڪ فهرست جنهن جو معائنو ڪري سگهجي ٿو ڊيبگر ۾.

س goodو ٿو لي! پوءِ ، اسان ان کي ڪيئن اھيون؟

Observer Function Types
اچو فرض ڪريون ته ھڪڙي مبصر فنڪشن جي پيرا ميٽرز کي سڏيو وي ٿو Parameters، جنھن جو نالو آھي مان استعمال ڪندس ڪوڊ ۾ عام قسم لاءِ. بنيادي طور تي ، هڪ مبصر فنڪشن جو قسم پوءِ آهي Parameters -> Void. بهرحال ، عام صورت لاءِ جتي مبصر جو ڪم هڪ طريقو آهي ، اهو مشڪل بڻائي ٿو ته اهو مبصر اعتراض جو ڪمزور حوالو رکي ۽ داخلا صاف ڪري جڏهن اعتراض تباهه ٿي وي. جڏھن توھان حاصل ڪريو ھڪڙو طريقو ڪلاس مان ، جھڙوڪ self.dynamicType.gotNewItem، نتيجي واري فنڪشن جو قسم آھي اصل ۾ TheClass -> Parameters -> Void. توھان فنڪشن کي سڏيندا آھيو ۽ ان کي پاس ڪريو ڪلاس جو ھڪڙو مثال ، ۽ اھو وري موٽي ٿو ھڪڙو نئون فنڪشن ان طريقي لاءِ جيڪو ان مثال تي لا appliesو ٿئي.

س everythingڪنھن شيء کي منظم رکڻ لاءِ ، اسان ذخيرو ڪنداسين ڪمزور حوالو مبصر جي اعتراض لاءِ ، ۽ اسان ذخيرو ڪنداسين مبصر فنڪشن کي ھن ڊگھي شڪل ۾. addطريقي جي سادي فارم لاءِ ، فنڪشن کي ر simplyو anotherئي فنڪشن ۾ لپائي سگھجي ٿو جيڪو ا paraلائي ٿو ان جو پيرا ميٽر ۽ موٽائي ٿو اصل فنڪشن. جيئن ته مبصر شيون مختلف قسمن جا ٿي سگهن ٿيون ، اسان انهن کي ذخيرو ڪنداسين بطور AnyObjectمبصر ڪم AnyObject -> Parameters -> Void.

ڪوڊ
اهو وقت آهي عملدرآمد کي ڏسڻ جو. عام طور تي ، ڪوڊ دستياب آھي GitHub تي:

https://github.com/mikeash/SwiftObserverSet

داخلائون
هر داخلا هڪ مبصر سيٽ ۾ آهي هڪ ڪمزور طور تي رکيل مبصر اعتراض ۽ هڪ فنڪشن. ھي نن smallو عام ڪلاس buنھي کي گڏ ڪري ٿو ، اجازت ڏئي ٿو صوابديدي پيرا ميٽر قسمن لاءِ:

    عوامي  ڪلاس  ObserverSetEntry < Parameters >  { 
        خانگي  ڪمزور  var  اعتراض :  AnyObject ؟ 
        private  let  f :  AnyObject  ->  Parameters  ->  Void 

        private  init ( object :  AnyObject ،  f :  AnyObject  ->  Parameters  ->  Void )  { 
            خود . اعتراض  =  اعتراض 
            خود . f  =  f 
        }
    }

مبصر سيٽ استعمال ڪري سگھي ٿو اعتراض ۽ فنڪشن مبصرن کي سڏڻ لاءِ ، ۽ چيڪ ڪري سگھي ٿو اعتراض nilکي خارج ڪرڻ لاءِ خارج ٿيل شين لاءِ داخلائون. ھي ڪلاس نشان لل آھي publicbecauseو ته اھو پڻ واپس ڪيو ويندو ڪالرن کي استعمال ڪرڻ لاءِ استعمال ڪرڻ جي removeطريقي جي طور تي.

مثالي طور ، هي ڪلاس اندر ئي اندر ل هوندو ObserverSet. بهرحال ، سوئفٽ اجازت نه ٿو ڏئي عام گھرن کي estاهڻ جي ، تنهنڪري ان کي هڪ ال top ٽاپ ليول قسم هجڻ گهرجي.

مبصر سيٽ
هن ObserverSetطبقي کي به عام ڪيو آهي Parameters:

    پبلڪ  ڪلاس  ObserverSet < Parameters >  {

NSNotificationCenterآھي موضوع محفوظ ، ۽ ھي ڪلاس پڻ ھجڻ گھرجي. مون استعمال ڪرڻ جو انتخاب ڪيو سيريل موڪلڻ جي قطار ان کي پورو ڪرڻ لاءِ:

        نجي  var  ترتيب  =  dispatch_queue_create ( "com.mikeash.ObserverSet" ،  nil )

مون پڻ لکيو آهي هڪ تڪڙو مددگار فنڪشن ان لاءِ:

        خانگي  فنڪشن  هم وقت ٿي ويو ( f :  Void  ->  Void )  { 
            dispatch_sync ( قطار ،  f ) 
        }

ان سان ، اھو ايترو سادو آھي جيترو synchronized{ ...code... }ڪوڊ تي لکڻ جو جيڪو استعمال ڪري ٿو گڏيل ڊيٽا.

داخلائون هڪ صف ۾ رکيل آهن:

        خانگي  ور  داخلائون :  [ ObserverSetEntry < Parameters > ]  =  []

صحيح طور تي speakingالهائڻ ، هي هجڻ گهرجي هڪ سيٽ بدران هڪ صف. بهرحال ، سيٽون نه آهن تمام س niceيون جيڪي استعمال ڪرڻ ۾ ا Swا سوئفٽ ۾ آهن ، there’sو ته اتي ڪوبه تعمير ٿيل سيٽ قسم ناهي. ان جي بدران ، توھان کي يا ته استعمال ڪرڻ گھرجي NSSet، يا استعمال ڪرڻ گھرجي Dictionaryھڪڙي Voidقسم جي قسم سان. جيئن ته مبصر سيٽون عام طور تي مشتمل هونديون ڪجھ داخلائون گھڻو ڪري ، مان فيصلو ڪيو ته و clarان وضاحت لاءِ.

سوئفٽ پڻ ظاھر ڪري ٿي ھڪڙي ظاھر پبلڪ انيسائيزر تي ، جيتوڻيڪ اھو خالي آھي ، جيئن ڊفالٽ ظاھر طور تي پبلڪ نه ڪيو ويو آھي:

        عوامي  init ()  {}

اهو سيٽنگ جو خيال رکي ٿو. اچو ته مکيه addطريقي تي نظر وجهون ، جيڪو وerي ٿو هڪ مبصر اعتراض ۽ فنڪشن:

        عوامي  فنڪ  شامل ڪريو < T :  AnyObject > ( اعتراض :  T ،  _  f :  T  ->  Parameters  ->  Void )  ->  ObserverSetEntry < Parameters >  {

ا ،يون ، داخلا اھيو. جو قسم fبلڪل نٿو ملي ObserverSetEntryانھيءَ سان جيڪو توقع رکي ٿو ، جئين اھو lookingولي رھيو آھي ھڪڙو فنڪشن جيڪو و takesندو آھي AnyObject، جڏھن اھو و takesندو آھي T. ھڪڙو نن adapڙو اڊاپٽر خيال رکي ٿو ھڪڙي قسم جي ڪاسٽ سان بي ترتيب ٿيڻ جو:

            let  entry  =  ObserverSetEntry < Parameters > ( object :  object ،  f :  {  f ( $ 0  as  T )  })

اها بدقسمتي آهي ته سوئفٽ جي ٽائيپ سسٽم کي بائي پاس ڪري هن طريقي سان ، پر اهو ٿي ويو ڪم.

createdاھيل داخلا سان ، ان کي شامل ڪريو صف ۾:

            هم وقت ٿيل  { 
                خود . داخلائون . شامل ڪريو ( داخلا ) 
            }

آخرڪار ، داخلا موٽي آئي آهي ڪالر ڏانهن:

            واپسي  داخلا 
        }

جڏهن ته ٻين addجو طريقو هڪ ننڍي adapter آهي:

        عوامي  func  شامل ڪرڻ ( م :  حراست ۾  ->  عشرت )  ->  ObserverSetEntry < حراست ۾ >  { 
            موٽڻ  خود . اشتھاري ( خود ،  {  نظر انداز  ۾  ف  }) 
        }

ھي گذري ٿو selfاعتراض جي طور تي ر becauseو انھيءَ ڪري جو اھو ھڪڙو آسان پوائنٽر آھي جيڪو جيئرو رھڻ جي ضمانت ڏئي ٿو. جڏھن کان nilشيون داخل ڪيون ويون آھن انھن کي ھٽايو ويو آھي ، اھو داخلا کي ارد گرد رکي ٿو جيستائين مبصر پاڻ مقرر ڪري. فنڪشن پاس ڪيو ويو secondئي پيرا ميٽر لاءِ صرف نظرانداز ڪري ٿو ان جي پيرا ميٽر ۽ واپسيءَ کي f.

removeطريقو لا implementedو ڪيو ويو آھي صف کي فلٽر ڪرڻ سان ملائڻ واري داخلا کي ھٽائڻ لاءِ. سوئفٽ جي Arrayقسم وٽ ھڪڙو removeطريقو ڪونھي ، پر filterطريقو سا theيو ڪم پورو ڪري ٿو:

        عوامي  فنڪ  هٽايو ( داخلا :  ObserverSetEntry < Parameters > )  { 
            synchronized  { 
                self . داخلا  =  پاڻ . داخلائون . فلٽر {  $ 0  ! ==  entry  } 
            } 
        }

هن notifyجو طريقو ڳالهين ۾ سادي آهي: هر هڪ ۾ داخل ٿيڻ لاء، ته مشاهدو فعل سڏ، ۽ هڪ سان ڪنهن به داخلا کي ختم nilمبصر شئي. بهرحال ، اهو بنايو ويو آهي ٿورو پيچيده ان حقيقت کان جنهن entriesتائين پهچڻ جي ضرورت آهي اندر کان synchronized، پر اهو هڪ خراب خيال آهي ته اتي مبصر جي افعال کي سڏي ، becauseو ته اهو آساني سان هڪ تعطل جو سبب بڻجي سگهي ٿو. انھيءَ مسئلي کان بچڻ لاءِ ، حڪمت عملي آھي س collectني مبصر جي ڪمن کي گڏ ڪرڻ جي ھڪڙي مقامي صف ۾ ، پوءِ وري ورجايو ۽ انھن کي synchronizedبلاڪ کان callاھر سڏيو . ھتي آھي فنڪشن:

        عوامي  func  اطلاح ( جي حراست ۾ :  حراست ۾ )  {

ڪال ڪرڻ جا افعال گڏ ڪيا ويا آھن ھڪڙي صف ۾:

            var  toCall :  [ Parameters  ->  Void ]  =  []

نوٽ ڪريو ته افعال جو قسم شامل نٿو ڪري ابتدائي AnyObject ->. شين کي سادي رکڻ لاءِ ، اسان firstايون ٿا پھريون ڪال synchronizedبلاڪ جي اندر ، انھيءَ لاءِ ته صف ۾ گڏ ڪيل افعال حتمي مبصر جا ڪم آھن جيڪي مبصر اعتراض سان ا already ۾ ئي لا appliedو ٿيل آھن.

داخلا تي ratingير ار ڪرڻ جي ضرورت آھي ھڪڙي synchronizedبلاڪ ۾:

            هم وقت سازي  { 
                پاڻ ۾ داخل ٿيڻ لاءِ  . داخلائون {   

داخل ڪريو nilاعتراض سان شيون:

                    جيڪڏھن  اجازت ڏيو  اعتراض :  AnyObject  =  داخلا . اعتراض  {

ڪيئي entry.fجي اعتراض سان سڏ ڪرڻ جو مشاهدو فعل ڄمائيندي:

                        فون ڪرڻ . شامل ڪريو ( داخلا . f ( اعتراض )) 
                    } 
                }

ان کان ا we جو اسان synchronizedبلاڪ leaveڏيون ، داخلائن کي صاف ڪريو انھن کي فلٽر ڪري جيڪي ھاڻي شامل آھن nil:

                خود . داخلا  =  پاڻ . داخلائون . فلٽر {  $ 0. اعتراض  ! =  nil  } 
            }

ھاڻي جڏھن افعال گڏ ڪيا ويا آھن ۽ synchronizedبلاڪ ختم ٿي ويو آھي ، اسان مبصر افعال کي سڏيون ٿا:

            لاء  م  ۾  toCall  { 
                ف ( جي حراست ۾ ) 
            } 
        }

اهو ئي آهي ObserverSetڪلاس لاءِ . اچو ته بند ڪرڻ واري ڪڙي کي نه وساريون:

    }

Tuples تي ھڪڙو نوٽ
توھان نوٽ ڪندؤ ته ObserverSetپيش ڪيل ڪوڊ مان ڪو به پتو نٿو ڏئي ته ڪيس اتي جتي گھڻا آھن Parameters، مثال طور:

        public  let  newItemObservers  =  ObserverSet < ( String ،  Int ) > ()

بهرحال ، اهو به ڪم ڪري ٿو ، مٿي ڏنل ڪوڊ استعمال ڪندي. ڇا ٿي رهيو آهي؟

اھو ظاھر ٿيو ته سوئفٽ ڪو فرق نٿو ڪري ھڪڙي فنڪشن ۾ جيڪو و parametersي ٿو ڪيترائي پيرا ميٽرز ۽ ھڪڙو فنڪشن جيڪو و pareي ٿو ھڪڙو پيرا ميٽر جنھن جو قسم آھي ٽپل. مثال طور ، هي ڪوڊ سڏي ٿو هڪ فنڪشن usingنهي طريقن سان استعمال ڪندي:

    func  f ( x :  Int ،  y :  Int )  {} 

    f ( 0 ،  0 ) 

    let  params  =  ( 0 ،  0 ) 
    f ( params )

ان جو مطلب اھو آھي ته ObserverSetڪوڊ ڪم ڪري سگھجي ٿو افعال لاءِ ھڪڙي پيرا ميٽر سان ، ۽ اھو مدد حاصل ڪري ٿو گھڻن پيٽرولن لاءِ مفت ۾. اتي آھن ڪجھ مضبوط حدون جيڪي توھان ڪري سگھوٿا انھن ڪيسن ۾ (مثال طور ، اھو لازمي طور تي ڪنھن به پيرا ميٽر کي تبديل ڪرڻ ناممڪن آھي) پر اھو بھترين ڪم ڪري ٿو ھن معاملي ۾.

نتيجو
NSNotificationCenter آسان آهي ، پر سوئفٽ languageوليءَ جون خاصيتون اجازت ڏين ٿيون گھڻو بهتر ورزن لاءِ. Generics اجازت ڏين ٿا ھڪڙي سادي API لاءِ جيڪا ا stillا تائين اجازت ڏئي ٿي س allني سا useين استعمال جي ڪيسن کي جڏھن ته جامد قسمون مهيا ڪن ۽ checkingنهي پاسن کان چيڪنگ ٽائيپ ڪن.

اهو آهي ا today لاءِ! واپس اچو ايندڙ وقت و moreيڪ خوفناڪ تجربن لاءِ. سا meantimeئي وقت ۾ ، جمعي جو سوال ۽ جواب پڙهندڙن جي خيالن سان ريل آھي ، تنھنڪري جيڪڏھن توھان وٽ ڪجھ آھي ته توھان ھي covered seeڪيل ڏسڻ چاھيو ٿا ، ان کي موڪليو !youا توھان ھن مضمون مان لطف اندوز ٿيا؟ مان وڪرو ڪري رهيو آهيان س booksو ڪتاب انهن سان ريل! جلد II ۽ III هاڻي outاهر آهن! اھي دستياب آھن ePub ، PDF ، پرنٽ ، ۽ iBooks ۽ Kindle تي. و Clickيڪ معلومات لاءِ ھتي ڪلڪ ڪريو .


رايا:جيڪب Gorban تي 2015-01-23 17:34:16 :مون ڪجھ similarاھيو سا similarي طرح پنھنجي ڪوڊ لاءِ (ان کي چينلز چئبو آھي). ان ۾ ڪجھ سادو عمل درآمد آھي (سysو سنئون افعال محفوظ ڪرڻ arrays ۾ ۽ نه methodُ methodايل طريقو افعال جيڪي توھان createاھيو ٿا.

يقينا، ، ان صورت ۾ مان چينلز جي رڪنيت ختم نٿو ڪري سگھان پر ا farا تائين اھو ڪم ڪري ٿو منھنجي استعمال جي ڪيسن

بابت . توھان جي تصور بابت . NSNotificationCenterھنن نوٽيفيڪيشنز کي تبديل ڪرڻ لاءِ ، ھڪڙو اھم استعمال وارو ڪيس آھي جيڪو انھيءَ طريقي ۾ شامل نه آھي ، ۽ ل possibleي نٿو ته واقعي ، ڪنھن به شيءِ تي نوٽيفڪيشن ڏسي رھيو آھي جيڪو ان کي موڪلي ٿو (addObserver ۾ اعتراض لاءِ ڪجھ به نه.) ھڪڙي طريقي سان ھي پڻ آھي. allows ا اجازت ڏئي ٿو اھڙي loose ڏيل جوڙي کي NSNotifications.

ھڪڙو سوال جيڪو مون وٽ آھي ، اھو آھي ته توھان کي dynamicTypeملڪيت مان goو وڻو آھي؟
mikeash تي 2015-01-23 17:41:33 :مون کي پڪ ناهي ته مون ڪڏهن ڏ seenو آهي ڪنهن جائز شيءِ جو جائز استعمال. NSNotificationCenter جون س facilitiesئي سهولتون دلچسپ آهن ، پر استعمال ڪرڻ مشڪل آهن بغير خطرناڪ

مفروضن جي ، جنهن ۾ توهان رهندا آهيو عمل جي عالمي structure انچي بابت. مون فيصلو ڪيو آھي نه ر becauseو انھيءَ ڪري جو اھو ختم ٿي و beingي ٿو بار بار ۽ ضرورت آھي اضافي ج spotsھن جي ھڪڙي ٽولي جو نالو تبديل ڪرڻ جي جيڪڏھن توھان ڪلاس جو نالو تبديل ڪريو. خاص طور تي وڏي Notالھ ناھي ، و moreيڪ ذاتي ترجيح جو معاملو.جون تي 2015-01-23 20:22:36 :ھي واقعي اھڙو ڪونھي جيترو NSNotifications/سينٽر استعمال ڪرڻ. NS نوٽيفڪيشن گمنام ٿي سگھن ٿا ۽ اھي ناھن ، تنھنڪري توھان و missingائي رھيا آھيو اطلاعن ۽ مبصرن جي وچ ۾ س biggest کان وڏو فرق. ھي آھي سوفٽ ۾ مبصرن جو دلچسپ عملدرآمد پر اھو واضح طور تي NSNotificationCenter جو متبادل ناھي.جون تي 2015-01-23 20:25:11 :حقيقت ۾ ، مان نٿو سوچي سگھان ھڪڙي مثال جي جتي مون ڏ seenو آھي يا استعمال ڪيو آھي NSNotificationCenter گمنام نوٽيفڪيشن براڊڪشن ۽ استقبال کانسواءِ anythingي ڪنھن به شيءِ لاءِ. جيڪڏھن مان knewاڻان انھيءَ شيءِ کي جيڪا مان ڏسڻ ٿي چاھيان ته مان ر justو ھڪڙو مبصر استعمال ڪندس.mikeash تي 2015-01-23 21:08:57 :توھان ڪيئن استعمال ڪندؤ بغير ھدف ڪيل اطلاعن جي مؤثر طريقي سان پنھنجي ايپليڪيشن جي انھن حصن کي سنگلٽن ۾ تبديل ڪرڻ کان.جون تي 2015-01-23 21:25:25 :wouldو ته اھو مؤثر طريقي سان انھن کي سنگليون بڻائيندو؟ شيون رجسٽر ٿين ٿيون ۽ رجسٽر ٿين ٿيون مختلف نوٽيفڪيشنز لاءِ جيئن اهي اچن ۽ ون. گھٽ ۾ گھٽ جڏھن NSNotificationCenter استعمال ڪري رھيا آھيو ، انھن واقعن جي رجسٽريشن جيڪي ڪڏھن به نشر نه ٿيندا آھن ر justو يڪ آھي. غير سنگلٽن شين لاءِ مان اڪثر استعمال ڪريان ٿو NSNotificationCenter سسٽم جي واقعن لاءِ. پر جڏھن کان مان نٿو singانان سنگتن کي ھڪڙي فطري طور خراب شيءِ ، مان انھن کي پڻ استعمال ڪريان ٿو رابطي جي ميکانيزم جي طور تي ڪجھ سنگلٽن شين لاءِ جيڪي مون وٽ عام طور تي آھن. سامان جھڙوڪ لاگ آئوٽ ۽ لاگ ان ايونٽس مختلف سنگلن کي doائڻ لاءِ ڪجھ ڪرڻ لاءِ (يعني صاف ڪيش ، نيٽ ورڪنگ کي ري سيٽ ڪريو ، ڊسڪ تي لکو ، فائلون ڊليٽ ڪريو). NSNotificationCenter پڻ خدمت ڪري ٿو ھڪڙي مرڪزي قسم جي اطلاعن لاءِ ، تنھنڪري مون کي اھو knowاڻڻ جي ضرورت ناھي ته مان ڪھڙي شيءَ کي ڏسڻ چاھيان ٿو خاص واقعن کي پھرين جاءِ تي.

پڻ ، جيڪڏھن توھان oيھر ڪري رھيا آھيو مبصر/نوٽيفڪيشن ميڪنزم کي ، پوءِ tو نه انھن کي استعمال ڪرڻ جي تمام ڏکوئيندڙ پہلو کي حل ڪريو ، انھن کي دستي طور تي رجسٽرڊ ڪريو. مون ڏ seenو آھي ان جو حل Objective-C ۾ پر ھڪڙو سوفٽ عملدرآمد دلچسپ ھوندو ، جيڪڏھن ممڪن ھجي.شيخ بي تي 2015-01-23 21:25:58 :ڪيچ استعمال ڪرڻ لاءِ سimateئي جائز استعمال ناھن؟

مان اهو استعمال ڪريان ٿو هر وقت. مثال طور جڏھن ڪنھن شيءِ جي ڪليڪشن جو انتظام ڪيو و thatي ته س postئي پوسٽ نوٽيفڪيشن جيڪي توھان ۾ دلچسپي و andن ٿا ۽ اھو مجموعو وقت سان تبديل ٿي وي ٿو. س catchني

کي پڪڙڻ سان ، توھان ھڪڙي نوٽيفڪيشن رجسٽر ڪندا آھيو ڪنھن به اعتراض مان پوسٽ ڏسڻ لاءِ [init] ۾ ، پوءِ توھان جي ھينڊلر طريقي ۾:

جيڪڏھن ([مجموعو مشتمل آھي Object: note.object]) {ھينڊل
نوٽيفڪيشن …
}

۽ [dealloc] ۾ توھان. deregister

ھي خراب ۽ ممڪن طور تي وgيڪ بگ جو شڪار ٿي ويندو س catchني کان-جيتوڻيڪ سوئفٽ ورزن سان.mikeash تي 2015-01-23 21:55:18 :جون: جيڪڏھن توھان رجسٽرڊ ڪريو ھڪڙي خاص نوٽيفڪيشن لاءِ موڪليل س objectsني شين طرفان ، ھاڻي توھان جو ڪوڊ توھان جي ايپ ۾ موجود س objectsني شين کان آگاھ ٿيڻو آھي جيڪي اھو نوٽيفڪيشن موڪليندا ، جيتوڻيڪ اھي مڪمل طور تي مختلف مثالن سان سن beingاليا پيا ون. توھان جي لاگ آئوٽ واقعي جي مثال لاءِ ، توھان نٿا چاھيو ڪيش صاف ڪريو يا فائلون ڊليٽ ڪريو جيڪڏھن ڪنھن instanceئي مثال جو سيشن لاگ آئوٽ ٿيو ، تنھنڪري توھان مؤثر طريقي سان پاڻ کي محدود ڪري رھيا آھيو ھڪڙي وقت ۾ ھڪڙي سيشن تائين. منهنجو خيال آهي ته اهو صرف توهان جي بيان تي اچي ٿو ته ”مان سنگلٽن کي فطري طور تي خراب شيءِ نٿو سمجهان. جيڪڏھن توھان آرام ڪري رھيا آھيو شين کي محدود ڪرڻ ھڪڙي مثال ۾ جيتوڻيڪ جڏھن ان جي سخت ضرورت نه ھجي ته پوءِ اھو پريشاني دور ٿي ويندي ، پر مان نه آھيان ، پاڻ.

مان ٿورڙو حيران ٿي ويس توھان جي ”دستي طور رجسٽرڊ ڪرڻ“ واري تبصري بابت ، sinceاڪاڻ ته مٿي ڏنل ڪوڊ سن handleاليندو آهي بلڪل انهي کي بغير ڪنهن فڪر جي.

برائن بي.:هر شيءَ ۾ نوٽيفڪيشن مشاهدو شامل ڪرڻ جيئن توهان ان کي صف ۾ شامل ڪريو ٿا ، ۽ ان کي هٽائڻ وقت جڏهن توهان صف مان هٽايو ٿا ، بلڪل آسان ل seemsي ٿو ۽ و moreيڪ بگ پروون ناهي. جيستائين توھان شامل نه ڪندؤ ۽ ڪ removeو ڪيترن ئي مختلف ھن placesن تان ، جيڪي توھان کي شايد ائين نه ڪرڻ گھرجن.باب تي 23/01/2015 22:06:10 :جيتوڻيڪ منسوخ ڪيل مبصرن کي ھاڻي ڪون سڏيو ويندو ، thisا ھي مسئلو ڪونھي ا stillا تائين ObserverSetEntry اعتراض کي leavingڏڻ جو (نيل اعتراض سان) مبصر سيٽ ۾ سدائين لاءِ؟ تنھنڪري جيڪڏھن توھان باقاعدگيءَ سان مبصرن کي رجسٽر ڪندا ، ۽ اھي ڊيلڪٽ ڪندا ، صف مسلسل unkاھي ويندي فضول سان.mikeash تي 2015-01-23 22:22:22 :شيون buildاھي وينديون جيڪڏھن توھان ڪڏھن به نوٽيفيڪيشن نه موڪليو ، sinceو ته مئل داخلا ر cleanو صاف ڪيا ويندا آھن جڏھن اطلاع ڏيو. اھو آساني سان علاج ڪيو ويندو ھڪڙي چيڪ سان جڏھن شامل ڪيو و wellي ، جيڪڏھن ضرورت ھجي.جون تي 2015-01-23 23:01:13 :مون کي پڪ ناهي ته توهان sayingو چئي رهيا آهيو ته مون کي س allني شين کان آگاهه رهڻو آهي جيڪي نوٽيفڪيشن موڪليندا آهن (جيڪڏهن توهان جو مطلب آهي ته مون کي هڪ ريفرنس جي ضرورت آهي) ، sinceو ته اهو ئي منظر آهي مان ان کان پاسو ڪريان ٿو جڏهن گمنام اطلاع استعمال ڪندي. ڪجھ اعتراض پوسٽ ڪن ٿا ”لاگ آئوٽ“ نوٽيفڪيشن ، مون کي واقعي پرواھ ناھي ته اھو isا آھي. ڪي objectيا اعتراض يا شيون وصول ڪن ٿيون نوٽيفڪيشن ۽ و someو ڪجھ عمل. يا شايد ا noا تائين ڪي به شيون createdاھيون نه ويون آھن جيڪي ان نوٽيفڪيشن کي ن. و most ۾ و I مون کي خبر هجڻ گھرجي ته ڪھڙا نوٽيفڪيشن ڪلاس مان موڪلي سگھجن ٿا ، جيڪڏھن مون کي خيال آھي ، ۽ اھو ر aو ھڪڙو دستاويز وارو مسئلو آھي. مون کي اطلاعن ذريعي ڪtenي نٿو سگھجي جن بابت مون کي خبر ناهي.

يا توھان جو مطلب ھي ھو ته گھڻا ڪلاس سا reasonsيا نوٽيفڪيشن موڪلي سگھن ٿا مختلف سببن جي ڪري ۽ مون کي شايد ان جي خبر ناھي؟ يعني ڪجھ بي ترتيب شئي ھڪڙي نوٽيفڪيشن نشر ڪري سگھي ٿي مان listenان ٿو ان جي مون کي توقع نه ھئي. اھو ر seemsو ل seemsي ٿو خراب اطلاع جي استعمال خلاف ورزي ڪندڙ شيءِ پاران. ايپل جا ڪلاس اهو نٿا ڪن (نوٽيفڪيشن منفرد آهن هڪ ڪلاس يا فريم ورڪ لاءِ ، عام طور تي). جيڪڏھن ڪا ٽئين پارٽي لائبريري ھئي ، چئو ، جاري ڪرڻ UIKeyboard نوٽيفڪيشن ڪنھن سبب لاءِ ، مان شايد ان فريم ورڪ کي استعمال ڪندي thيھر سوچيان ھا ، جيڪڏھن مان ڪري سگھان ھا.

جيڪڏھن واقعي به اھڙا وقت آھن جو مان نه ٿو چاھيان ته نوٽيفڪيشن جي بنياد تي ايڪشن و ،ان ، مان انفو ڊڪشنري تي انحصار ڪريان ٿو ته اھو طئي ڪريان ته ڪھڙي ڪارروائي ڪرڻي آھي. منهنجي تجربي ۾ ، اهڙيون حالتون نادر آهن ، خاص طور تي اطلاعن لاءِ جيڪي مقصد آهن عالمي. جيڪڏھن نوٽيفڪيشن ۾ شامل ناھي مفيد معلومات ڊيڪ ، ،يهر ، اھو ل notificationي ٿو خراب نوٽيفڪيشن ڊيزائين وانگر ، عام طور تي گمنام نوٽيفڪيشن نمونن سان ڪو مسئلو ناھي.

منهنجو ر pointو نقطو اهو آهي ته توهان جو حل ، جڏهن ته دلچسپ ، مڪمل طور تي نظر انداز ڪري ٿو هن جائز ۽ ڪارآمد منظر کي اطلاعن لاءِ.دائود تي 24/01/2015 02:19:17 :مان جون سان متفق آهيان. NSNotificationCenter مفيد آھي ، جزوي طور ، itاڪاڻ ته اھو اجازت ڏئي ٿو گمنام اطلاعن جي. مان سمجهان ٿو ته اھو ھڪڙو وڏو حصو آھي جيڪو اھو ايجاد ڪيو ويو ھو ڪرڻ لاءِ!

اھو خيال ته توھان ڪنھن طرح ختم ڪري سگھوٿا ڪيترن ئي مثالن سان جيڪي س allئي لاگ آئوٽ واقعي تي عمل ڪندا ، ۽ ھڪ’sئي جي ڪوششن کي جھليو ، ل seemsي ٿو ھڪڙو ڊگھو. اھي ماڻھو جيڪي گمنام اطلاعن کي استعمال ڪرڻ چاھين ٿا ، انھن کي خبردار رھڻو آھي ته اھي doingا ڪري رھيا آھن ، ۽ اھو غلط آھي تجويز ڪرڻ ته انھن کي غير محفوظ محسوس ڪرڻ گھرجي صحيح طور تي بااخلاق ڪوڪو خاصيتن کي استعمال ڪرڻ لاءِ.

NSBlog نالي ھڪ بلاگ مان ، مان توقع ڪريان ھا ته و moreيڪ عاجز ۽ حوصلہ افزا طريقي جي. ڪوڪو جي تخليق ڪندڙن کان پاڻ کي اعليٰ سمجھڻ جي ڪوشش ڪرڻ آسين آھي.mikeash تي 2015-01-24 02:43:58 :جون: مان sayingا چئي رهيو آهيان اهو آهي ته امڪاني طور تي توهان جي پروگرام ۾ تمام گهڻا مثال آهن جيڪي موڪلي سگھن ٿا نوٽيفڪيشن ، ۽ هڪ مبصر لاءِ مناسب عمل انحصار ڪري ٿو ته اهو ڪهڙو مثال آهي. توھان جي لاگ آئوٽ نوٽيفڪيشن مثال لاءِ ، ،يهر ، توھان شايد سندون حذف ڪرڻ چاھيو ٿا ، پر * صرف * جڏھن اھو موڪليو ويو آھي لاگ ان ڪنٽرولر طرفان جيڪو توھان واقعي خيال رکندو. هڪ logيو لاگ ان ڪنٽرولر جيڪو پروگرام جي مختلف حصي پاران استعمال ڪيو و shouldي اهو سبب نه هجڻ گهرجي. اھو مون کي ل soundsي ٿو you’reڻ توھان تمام گھڻو انحصار ڪري رھيا آھيو اتي ر onlyو ھڪڙي مثال طور ڪنھن به ڪلاس جي.

دائود:جيڪڏھن توھان توقع ڪئي ھتي ھڪڙي عاجزي واري روش ھتي ته پوءِ مان سمجھان ٿو ته توھان پريشان ٿي سگھوٿا. توھان حاصل ڪندؤ مون سان صفر ٽريڪشن پيش ڪندي ته مون کي تنقيد نه ڪرڻ گھرجي انھيءَ کي جيئن مان ڏسندو آھيان ڪوڪو ڊيزائن جون غلطيون. ڪوڪو پنھنجي ڊگھي زندگيءَ دوران ڪجھ غلطين جو شڪار ٿي چڪو آھي ، ۽ مان انھن جي نشاندھي ڪرڻ ۾ شرمائيندڙ نه آھيان. ان کان ويڪ ، تمام گھڻا ڪوڪو پروگرامر قيمت جي س expي ڊيزائن تي خرچ ڪن ٿا. مثال طور ، مون ڏ seeو آھي ڪوڪو ايپس جو ھڪڙو ٽون جيڪي سنگلٽن شين سان fullريل آھن جيڪي اتي نه ھئڻ گھرجن ، ۽ استعمال ڪيا ويا آھن صرف انھيءَ ڪري ته ھڪڙو سنگلٽن تائين پھچڻ ڪجھ آسان آھي چو thanاري مثال پاس ڪرڻ کان. گمنام اطلاع نظر اچن ٿا سا theئي قسم جو مسئلو مون لاءِ. توھان کي يقيني طور تي اختلاف ڪرڻ جو ھر حق آھي ، پر جيڪڏھن توھان ان تي بحث ڪرڻ چاھيو ٿا ، توھان کي ڪنھن قسم جو دليل آڻڻ جي ضرورت آھي ، ر simplyو مون کي غلط قرار نه ڏيو becauseاڪاڻ ته مان شايد ايپل سان اختلاف ڪريان.دائود تي 2015-01-24 03:34:24 :لکڻ جاري رکو ، جيتوڻيڪ! معاف ڪجو ، منهنجو مطلب اهو نه هو ته مان پاڻ کي مايوس ڪريان. وڏو پرستار ، ر disappو مايوس رويي کان.اردن ۾ 2015-01-24 04:48:14 :چ doneيءَ طرح ٿي ويو. تجويز: استعمال ڪريو ”_“ بدران ”نظرانداز“.

جون: مان متفق آهيان مائڪ سان ، ۽ ايپل جا ڪلاس يقينا هي ڪندا. اھو likeڻ وانگر آھي UITableViewSelectionDidChangeNotification تي <em> س U UITableViews </em> ايپ ۾. توھان ڪري سگھوٿا ، پر اھو ر senseو سمجھ ۾ اچي ٿو جيڪڏھن توھان knowاڻو ٿا ته توھان جي ايپ ۾ س the UITableViews سا shouldئي طريقي سان ھلڻ گھرجن. سا goesيو ئي و anyي ٿو ڪنھن به نوٽيفڪيشن لاءِ جيڪو توھان پاڻ createاھيو ٿا: جيڪڏھن ايپ ۾ ھر شيءِ سا responseئي جواب جو مستحق آھي ، ته پوءِ اھو بھترين آھي … پر اھو ان کي سخت بڻائي ٿو جيڪڏھن توھان مستقبل ۾ فرق ڪرڻ چاھيو ٿا.Pavel تي 24/01/2015 07:43:42 :توھان .و ٿا و aو ھڪڙو حوالو self.entries ۾ بيان () ۽ پوءِ استعمال جاري رکو self.entries؟ جيڪڏھن اھو ٽائپو نه آھي ، youا توھان وضاحت ڪري سگھوٿا ان جي پويان دليل.Deniska تي 2015-01-24 09:24:39 :نيل شين جي جائز استعمالن مان ھڪڙو listeningي سگھجي ٿو NSManagedObjectContextDidSaveNotification.
ايپ ٿي سگھي ٿي گھڻن حوالن اندروني ضرورتن لاءِ ۽ مکيه موضوع ٿي سگھي ٿو ضم ڪرڻ ڊيٽا جي تبديلين کي بنيادي حوالي سان. ۽ مکيه حوالي سان نه هجڻ گھرجي س possibleني ممڪن پس منظر جي حوالي سان. تنھنڪري ، اسان س allئي اطلاع toون ٿا ۽ انھن تبديلين کي ضم ڪريون ٿا.ايسن تي 2015-01-24 18:02:15 :عظيم پوسٽ! توھان لاءِ ھڪڙو سوال:

توھان mentionايو ته اھو ڪيئن بدقسمتي آھي جو سوئفٽس قسم جي حفاظت کي بائي پاس ڪيو و whenي جڏھن توھان ڪنھن به اعتراض کان T ڏانھن و whenو ٿا جڏھن ڪو داخلا شامل ڪندي. توھان کي Oو استعمال ڪرڻ گھرجي AnyObject ھڪڙي ج placeھ تي ۽ T: AnyObject inئي ۾؟ pleaseا توھان مھرباني ڪري انھيءَ پ behindيان دليل بيان ڪري سگھوٿا؟ (معاف ڪجو جيڪڏھن اھو پ obviousرو آھي ، مان ھڪڙو تيز شروعات ڪندڙ آھيان).

پڻ ، هڪ reasonيو سبب گمنام اطلاعن کان بچڻ جو: ٽيسٽ هڪ وڏو درد بڻجي و sinceي ٿي sinceو ته اتي ٿي سگھي ٿو انهن مثالن جا ڪيترائي مثال جيڪي توهان سوچيو ته سنگلٽن هئا جڏهن ته اهي س testsئي ٽيسٽ هلائي رهيا آهن. منهنجو خيال آهي ته اهو پڻ هڪ سبب آهي سنگلٽن کان بچڻ جو.سبيل-شاهين تي 2015-01-24 21:55:12 :گمنام اطلاعن لاءِ ھڪڙو مفيد استعمال ڪيس آھي ٽريڪنگ بنڊلز کي متحرڪ طور تي لوڊ ڪندي NSBundleDidLoadNotification لاءِ رجسٽريشن ڪندي.mikeash تي 2015-01-25 02:31:41 :دائود: ڪا به ڻتي ناهي ، مان ان کي سنالي سگهان ٿو. ڪڏهن ڪڏهن مون وٽ مضبوط عقيدا هوندا آهن ۽ مان شرمندو ناهيان ماڻهن کي ائڻ ۾. مان اميد نٿو ڪريان ته ھر ماڻھو متفق ھوندو.

اردن: س suggesي تجويز آهي استعمال ڪرڻ بابت _ بدران نظر انداز ڪرڻ جي. مان سمجهان ٿو ته مان ھاڻي رھندس ”نظرانداز“ سان ھاڻي جيئن ته اھو مون لاءِ و clearيڪ واضح لي ٿو. اھو ٿي سگھي ٿو ر justو theوليءَ جي جديديت جي ڪري ، جيتوڻيڪ. هڪ دفعو ماڻهن استعمال ڪيو آهي سوئفٽ ٿوري دير لاءِ مان تصور ڪريان ٿو ته _ اتي و naturalيڪ قدرتي نظر ايندي.

Pavel: عارضي دماغ جي خرابي. مون تڪڙو حل ڪيو. انهي جي نشاندهي ڪرڻ لاءِ مهرباني!

ڊينيسڪا: thatا اهو فرض نٿو ڪري ته توهان جي ايپ ڪڏهن به صرف هڪ ڪور ڊيٽا اسٽور کي هٽائيندي آهي؟ اهو ل seemsي ٿو هڪ خراب مفروضو اهڻ لاءِ.

جيسن:بهترين سوال. اھو ھي down اچي ٿو ته نه figureاڻڻ س aو رستو generولهڻ جو هڪ س wayو طريقو آهي هڪ متفاوت مجموعو عام ڪرڻ سان. اڪيلائيءَ ۾ ، اھو سمجھ ۾ ايندو ته ObserverSetEntryجيئن لکيو وي ObserverSetEntry<T, Parameters>. انھيءَ طريقي سان ، ھر شيءِ ھميشه عام ٿي ويندي ۽ زندگي س beي ھوندي. پر مان نه figureاڻي سگھيس ھڪڙو طريقو جيڪو ObserverSetمعقول طور تي مشتمل ھجي ۽ ObserverSetEntryobjects الھايان ھڪڙي Tقسم جي شين سان . انھن AnyObjectس all ني کي استعمال ڪرڻ سان اھو مسئلو بائي پاس ٿي ويو آھي.

جين ڊينيل: مان متفق آهيان ، اهو ڏسڻ ۾ اچي ٿو هڪ س caseو ڪيس صفر لاءِ . ھن خاص صورت ۾ ، جڏھن کان توھان غالبا never ڪڏھن به ان نوٽيفڪيشن کي ڪنھن به شيءِ لاءِ listenڻ نھ چاھيو پرnil ، سا functionalityي ڪارڪردگي س providedني لاءِ عالمي ObserverSetمثال سان مهيا ڪري سگھجي ٿي.NSBundle. لوڊ ٿيل ڪوڊ موروثي طور تي عالمي آھي ، يقينا، ، ۽ اھو سمجھ ۾ ايندو ته ظاھر طور تي ھڪڙو عالمي نوٽيفڪيشن سسٽم آھي ان سان گڏ وڻ لاءِ.آر جارج تي 2015-01-26 22:05:47 :مان استعمال ڪريان ٿو سا Cيو بنيادي ڊيٽا جو نمونو جيڪو ڊينيسڪا بيان ڪري ٿو ، تمام س effectي اثر لاءِ.

NSManagedObjectContextDidSaveNotification هينڊلر طريقي ۾ پهرين شي پوسٽنگ جي حوالي سان هڪ امتحان آهي ڏسڻ لاءِ ته it’sا اهو هڪ آهي جنهن جي مون کي پرواه آهي: “saveا هي بچت منهنجي اسٽور کي متاثر ڪري رهي آهي؟”

ڏنو ويو وسيع تخليق جي creationاھڻ جي حوالي سان س allي ايپ ذريعي ، اھو آسان آھي registندڙ کي رجسٽر ڪرڻ کان ھر ڪنھن حوالي سان جيئن مان ان کي ،اھيان ، ۽ رجسٽريشن ڪري asڏيان جيئن مان رد ڪريان.Pavel تي 2015-01-27 07:45:54 :مڪيش مون کي ا still ا تائين سمجهه ۾ نٿو اچي ته توهان self.entries جو مقامي حوالو descriptionو و descriptionو تفصيل ۾ ، supposedا اهو سمجهيو و aي ته ڪاپي insteadاهڻ بدران ريفرنس؟بل تي 2015-01-27 13:28:44 :ھي واقعي ھڪڙو س APIو API آھي!

explainا توھان وضاحت ڪري سگھوٿا ته توھان جو مطلب “ا آھي “(مثال طور ، اھو ضروري آھي ته ڪنھن به پيرا ميٽر کي تبديل ڪرڻ ناممڪن آھي)” سيڪشن ۾ نالي واري ٽپلز کي استعمال ڪرڻ بابت ھڪڙي دليل جي طور تي ھڪڙي پيرا ميٽر فنڪشن لاءِ؟mikeash تي 2015-01-28 01:30:01 :Pavel: اھو ھڪڙي ڪاپي اھي ٿو. سوئفٽ ايريز وٽ آھن قيمتي لفظ ، تنھنڪري ر doingو ڪرڻ سان a = bتوھان کي ھڪڙو نئون حاصل ٿئي ٿو.

بل: غور ڪريو ھڪڙي عام پاسٿرو فنڪشن تي: ھي ڪم ڪري ٿو گھڻن پيٽرولن لاءِ. ھاڻي تصور ڪريو جيڪڏھن توھان چاھيوٿا ته ھڪڙو ورينٽ لکان جيڪو ، چوندو ، شامل ڪريو 1 ڪنھن به انٽيجر پيرا ميٽرز کي اصلي فنڪشن سڏڻ کان پھريائين. ان کي پورو ڪرڻ جو ڪو معقول طريقو ناهي.

func call<T>(function: T -> Void, parameters: T) {
    function(parameters)
}

Rupert تي 2015-01-29 10:56:52 :هيلو مائڪ – anotherئي معلوماتي مضمون لاءِ مهرباني! مون کي ھميشه مليو آھي توھان جا آرٽيڪل تمام سبق آموز ، خاص ڪري اھي جيڪي سوئفٽ جي گھٽ سطحي ڪارڪردگيءَ تي.

مان توھان سان پوريءَ طرح متفق آھيان سنگتن جي بilsڙن تي ، جن مان NSNotificationCenterڪجھ به نه استعمال ڪرڻ وارا ضرور آھن. ٿي سگھي ٿو اھو بحث ڪجي ته جيڪڏھن اسان استعمال ڪري رھيا آھيون ھڪڙي غير مشترڪه نوٽيفڪيشن سينٽر جو (يعني جيڪو اسان فوري ۽ انجيڪشن ل everywhereائي ھر ھن it استعمال ڪيو و subscribeي ٿو سبسڪرائيب ڪرڻ / شايع ڪرڻ لاءِ) پوءِ اھو ھاڻي سنگلٽن نه پر ر aو ھڪ رياستي شئي آھي. متحرڪ خاصيتون. بهرحال ، ل almost س allئي استعمال ان جا ل passن ٿا پاس ڪرڻ ذريعي گڏيل مثال.

بدقسمتيءَ سان ڪيترائي منظرناما آھن جتي ل seemsي ٿو ته اسان وٽ choiceيو ڪو چارو ڪونھي پر استعمال ڪريو ھن سنگلٽن رويي کي ، جھڙوڪ جڏھن ڪيبورڊ نوٽيفڪيشن iOSڻ لاءِ (iOS ۾) theو ته اھي شيون جيڪي اسان listenڻ چاھيون ٿا اھي اسان لاءِ دستياب ناھن (جيڪڏھن ڪنھن کي خبر آھي ته رستي جي چو aroundاري مون کي دلچسپي ھوندي اھو hearڻ لاءِ).

مون کي (ٽيڪا جي ڊيگهه کي وڏن سورن وٺڻ ويا آهن منهنجي ڪوڊ ۾ سڀ singletons مان نجات حاصل ڪرڻ NSBundle۽ UIScreenبدران ڪيئي جي، اعتراض ۾ جنهن جي ضرورت کين تائين رسائي mainBundle۽ mainScreen). ٿي سگھي ٿو مان تجويز ڪريان ڪوڪو ۾ سنگليٽن کان بچڻ جي بھترين طريقن بابت؟

دلچسپي و thoseندڙن لاءِ ، سlet کان و persيڪ قائل ڪندڙ دليل سنگلنٽن جي خلاف جيڪي مون کي مليا آھن اھو اھو پراڻو مضمون آھي-http://www.object-oriented-security.org/lets-argue/singletons
اهو ل seemsي ٿو ته ڪيترائي ڪوڊ/ايپليڪيشن سيڪيورٽي مسئلا ر existو موجود نه هوندا جيڪڏهن مڪمل انحصار انجيڪشن لا wereو ڪيو ويو.

Thanksيهر مهرباني.Guillaume Lessard at 2015-02-02 20:06:09 :تمام دلچسپ مضمون ، مھرباني.
استعمال جي حوالي سان dispatch_sync جي ھڪڙي سيريل قطار ڏانھن ، جيڪڏھن توھان ان مخصوص اڏاوت کي ڪڏھن به نشان لايو آھي ته توھان کي خبر پوندي ته اھو خوفناڪ حد تائين سست آھي. توھان ان جي بدران استعمال ڪري سگھوٿا OSSpinLock ، جيڪو ر fineو fineيڪ ھوندو خاص ايپليڪيشن لاءِ جيڪو توھان استعمال ڪري رھيا آھيو: وقت جي دير ۾ شامل ٿي سگھي ٿو شدت جا آرڊر ھن طريقي سان ننorterا ھجن جھڙو dispatch_sync استعمال ڪرڻ جي.


private var lock = OS_SPINLOCK_INIT
private func synchronized(f: Void -> Void) {
  OSSpinLockLock(&lock)
  f()
  OSSpinLockUnlock(&lock)
}

Deniska تي 2015-02-06 16:09:03 :مائڪ ،

دراصل ، اھو نقطو ڪم ڪري ٿو okayيڪ ڪيترن ئي بنيادي ڊيٽا اسٽورز ڪنفگريشن سان.
نوٽيفڪيشن موڪليو آھي جيڪو آھي ھڪڙو حوالو محفوظ ڪيو پيو وي. مان چيڪ ڪيان ٿو ته منھنجو حوالو ۽ موڪليندڙ وٽ سا persيا persistentStoreCoordinator آھن.
جيڪڏھن نه – مون کي تبديلين کي ضم ڪرڻ جي ضرورت ناھي.
اهڙو ئي ڪجھہ.
۽ وoverيڪ ، اھو ڪم ڪري ٿو تيزيءَ سان (منھنجي صورت ۾) ان جي thanيٽ ۾ ڪيترن ئي estالھين جي.mikeash تي 2015-02-06 16:32:20 :Guillaume Lessard: اتفاق سان آئون بحث ڪريان ٿو انھيءَ جي نفعي ۽ نقصان تي پنھنجي تازي مضمون ۾. توھان صحيح آھيو ته ھڪڙو اسپين لاڪ بھترين ڪم ڪندو ھتي ، پر مان ترجيح ڏيان ٿو انھن کي استعمال ڪرڻ کان سواءِ ڪجھ س identifiedاڻپ ٿيل رفتار جي مسئلي جي.

ڊينيسڪا: مان چوندس ته اهو اشارو ڪري ٿو ڊيزائن جو مسئلو ڪور ڊيٽا API ۾. جيڪڏھن نوٽيفڪيشن بچايا و everythingن ھر شيءِ کي متاثر ڪن خاص اسٽور اسٽور ڪوآرڊينيٽر سان ، ته پوءِ اھو ھجڻ گھرجي اطلاع پوسٽ ڪرڻ وارو ، نه انفرادي حوالي سان. (جيڪڏھن اھڙا ڪيس آھن جتي توھان ر careو پرواھ ڪندا آھيو مخصوص حوالي سان پوءِ مان چوان ٿو bothنھي کي نوٽيفڪيشن موڪلڻ گھرجي.)Gaurav اگروال تي 2015-02-13 02:46:34 :pleaseا توھان مھرباني ڪري ھن نحو تي ڪجھ روشني وجھو:

private let f: AnyObject -> Parameters -> Voidmikeash تي 2015-02-15 02:34:48 :اھو قسم آھي ھڪڙو فنڪشن جيڪو و takesي ٿو an AnyObject۽ موٽائي ٿو anotherيو فنڪشن. واپسي جو قسم و takes Parametersي ٿو ۽ واپس ڪري ٿو باطلMobiledic تي 2015-03-04 14:42:50 :جيتوڻيڪ مان سوئفٽ سان بلڪل واقف نه آھيان (مان ا stillا تائين OC ۾ ڪوڊ لکان ٿو) ، مضمون ۾ وضاحت حقيقت ۾ س .ي آھي. ٿي سگھي ٿو اھو ئي وقت ھجي سوئفٽ ڏانھندائود Baraff تي 2016-01-24 19:23:07 :هڪ ترسيل قطار في اعتراض؟ thatا اھو ھڪڙو مسئلو آھي؟

مون ان بابت ھتي پ askedيو:

http://stackoverflow.com/questions/34980308/how-many-is-too-many-for-create-dispatch-queues-in-gcd-grand-central-dispatch